Angular2 стиль руководства - свойство со знаком доллара?
Посмотрев на angular2 пример кода, мы видим некоторые общедоступные свойства со знаком $:
<....>
private missionAnnouncedSource = new Subject<string>();
private missionConfirmedSource = new Subject<string>();
// Observable string streams
missionAnnounced$ = this.missionAnnouncedSource.asObservable();
missionConfirmed$ = this.missionConfirmedSource.asObservable();
<....>
Кто-нибудь может объяснить:
- почему используется $(в чем причина этой нотации? всегда используйте это для общедоступных свойств)?
- используются общедоступные свойства, но не методы (например, missionAnnouncements(), missionConfirmations()) - снова это соглашение для приложений ng2?
Кажется, что в этом руководстве нет ничего в этом руководстве?
Ответы
Ответ 1
$suffix (популяризированный Cycle.js) используется, чтобы указать, что переменная является Observable.
Это может быть сделано и в официальном руководстве по стилю, но он еще не существует
Подробнее здесь: Что означает знак суффикса доллара $
?
Ответ 2
Я не видел этого $
в руководстве по стилю, но видел, что он часто используется для общедоступных свойств, которые ссылаются на наблюдаемые, на которые можно подписаться.
Ответ 3
Парадигма имен имен $возникла у Андре Сальца и предлагает плюрализировать все имена переменных, которые содержат наблюдаемые или потоки.
getAll(): Observable<Zone[]>{
let zone$ = this.http
.get(`${this.baseUrl}/zones`, {headers: this.getHeaders()})
.map(mapZone);
return zone$;
}
Другой подход заключается в плюрализации имен переменных, которые содержат наблюдаемые или потоки с символом юникода, который соответствует последней букве слова. Это устраняет проблему словами, которые не имеют множественного значения с помощью "s".
mouse$ vs mic€
Ни одно из этих соглашений об именах не содержится в официальном руководстве по стилю Angular. Использование одного или другого (или ни одного) полностью зависит от личных предпочтений.
Ответ 4
Я видел, что переменные заканчиваются на $
при чтении официального учебника героя:
<div id="search-component">
<h4>Hero Search</h4>
<input #searchBox id="search-box" (keyup)="search(searchBox.value)" />
<ul class="search-result">
<li *ngFor="let hero of heroes$ | async" >
<a routerLink="/detail/{{hero.id}}">
{{hero.name}}
</a>
</li>
</ul>
</div>
Посмотрите внимательно, и вы увидите, что * ngFor выполняет итерацию над списком heroes$
, не героями.
<li *ngFor="let hero of heroes$ | async" >
$- это соглашение, которое указывает, что герои $являются наблюдаемым, а не массивом.
В большинстве случаев мы не подписываемся на эти наблюдаемые переменные в компоненте. Обычно мы используем AsyncPipe для автоматической подписки на переменные Observable.
Я не нашел его в Руководстве по стилю, поскольку Angular5.1 выпустил вчера (6 декабря 2017 года).