angular2 style guide - свойство со знаком доллара?


185

Глядя на пример кода 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?

Не кажется, что есть что-нибудь по этому поводу в официальном руководстве по стилю ?

Ответы:


266

$ суффикс (популяризированный Cycle.js ) используется, чтобы указать, что переменная является наблюдаемой . Это могло бы сделать это к официальному руководству по стилю тоже, но это еще не там

Подробнее здесь: Что означает суффиксный знак доллара $?

Обновление: Подробнее о знаке «$» на сайте Angular можно узнать здесь: https://angular.io/guide/rx-library#naming-conventions-for-observables.


4
Это не дойдет до официального руководства по стилю. Я положу на это 100 долларов.
Эрик Бишард

15
Ссылка в угловых документах: angular.io/guide/rx-library#naming-conventions-for-observables
michelepatrassi

66
@EricBishard Ты имеешь в виду 100 $
TabsNotSpaces

1
как насчет обещаний?
galki

7
безопасность работы - сделать код сложнее для непрофессионала.
java-addict301

14

Парадигма $ naming берет свое начало от Андре Сальца и предлагает использовать множественное число всех имен переменных, которые содержат наблюдаемые или потоки.

getAll(): Observable<Zone[]>{
    let zone$ = this.http
      .get(`${this.baseUrl}/zones`, {headers: this.getHeaders()})
      .map(mapZone);
      return zone$;
  }

Другой подход заключается в том, чтобы создать имена переменных, которые содержат наблюдаемые или потоки, с символом Юникод, который соответствует последней букве слова. Это решает проблему со словами, которые не являются множественными числами с "s".

mouse$ vs mic€

Ни одно из этих соглашений об именах не входит в официальное руководство по стилю Angular. Использование одного или другого (или ни одного) полностью зависит от личных предпочтений.


10
Какту $ против Какти
БАЙТ

Хорошая ссылка! Также проверьте эту статью. Что меня раздражает, так это найти попытку сделать это в моей кодовой базе (другие сотрудники) и ошибиться, поставить суффикс на неправильную переменную или, что еще хуже, начать переменную с нее. Я видел, как люди используют это без последовательности, в этом случае это не имеет никакого смысла. medium.com/@benlesh/…
Эрик Бишард

Если вы хотите его использовать, я бы рекомендовал следующие соглашения об именах, как в этом репо: github.com/bodiddlie/rxheroes/blob/master/app/effects/hero.ts И также делать это всегда или никогда. Будьте последовательны ради наблюдаемого бога.
Эрик Бишард,

2
fish$vsfish€$
Мартин Шнайдер

11

Обновление : https://angular.io/guide/rx-library#naming-conventions-for-observables

Поскольку приложения Angular в основном написаны на TypeScript, вы обычно будете знать, когда переменная является наблюдаемой. Хотя среда Angular не предписывает соглашение об именовании для наблюдаемых, вы часто будете видеть наблюдаемые, названные со знаком «$».

Это может быть полезно при сканировании кода и поиске наблюдаемых значений. Кроме того, если вы хотите, чтобы свойство сохраняло самое последнее значение из наблюдаемой, может быть удобно просто использовать одно и то же имя с или без «$».


Оригинал :

Я видел, как заканчивались переменные $при чтении официального урока по герою:

<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" >

$ - это соглашение, которое указывает, что heroes $ - это Observable, а не массив.

В большинстве случаев мы не подписываемся на эти наблюдаемые переменные в компоненте. Мы обычно используем AsyncPipe для автоматической подписки на наблюдаемые переменные автоматически

Я не нашел его в Руководстве по стилю с тех пор, как Angular5.1 вышел вчера (6 декабря 2017 года).


Из руководства по стилю Angular 9heroes: Observable<Hero[]>;
Рикардо Сарасино

9

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.