Angular - какие переменные должны быть определены внутри / снаружи экспортируемого класса? - PullRequest
0 голосов
/ 08 мая 2018

В уроке Angular здесь: https://stackblitz.com/angular/qmgqmlrqmye?file=src%2Fapp%2Fhero.service.ts

Мы должны определить httpOptions вне экспортированного класса HeroService и heroesUrl внутри класса. Перемещение одного внутрь или наружу класса нарушает работу приложения. Что является причиной этого? Как мне узнать, какие переменные должны быть определены внутри или снаружи?

Пример кода:

import { HttpClient, HttpHeaders } from '@angular/common/http';

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};

@Injectable({ providedIn: 'root' })
export class HeroService {

private heroesUrl = 'api/heroes';  // URL to web api

constructor(
  private http: HttpClient,
  private messageService: MessageService) { }

/** GET heroes from the server */
getHeroes (): Observable<Hero[]> {
  return this.http.get<Hero[]>(this.heroesUrl)
    .pipe(
      tap(heroes => this.log(`fetched heroes`)),
      catchError(this.handleError('getHeroes', []))
    );
}
...

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете поместить любую из этих вещей в класс или за его пределы. Я лично положил все эти вещи в класс, хотя они, очевидно, являются его частью.

Членам, определенным внутри класса, либо предваряется private, что означает, что на них можно ссылаться только из класса, public означает, что вы можете ссылаться на них извне класса или без него, что просто означает его неявную общедоступность.

Давайте посмотрим, как мы будем двигаться httpOptions внутри класса. Поскольку это деталь реализации, о которой должен знать только класс, имеет смысл определить его как закрытый член: private httpOptions = { headers: new HttpHeaders({'Content-Type': 'application/json'}) }

Теперь, поскольку это член класса, для доступа к нему мы должны использовать this. this - это просто ссылка на контекст класса, поэтому мы говорим, дайте мне члена класса this.

Везде, где вы видите ссылку httpOptions, измените ее на this.httpOptions

Надеюсь, вы сможете увидеть, как вы это сделаете, и определить их как констант вне класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...