angular2 guide guide - нерухомість зі знаком долара?


185

Переглядаючи приклад коду angular2 , ми бачимо деякі загальнодоступні властивості зі знаком $:

  <....>
  private missionAnnouncedSource = new Subject<string>();
  private missionConfirmedSource = new Subject<string>();
  // Observable string streams
  missionAnnounced$ = this.missionAnnouncedSource.asObservable();
  missionConfirmed$ = this.missionConfirmedSource.asObservable();
  <....>

Хтось може пояснити:

  • чому використовується $ (яка причина цього позначення? завжди використовуйте це для публічних властивостей)?
  • публічні властивості використовуються, але не методи (наприклад, місіяAnnouncements (), місіяКонфірмації ()) - знову ж таки, це умова для програм ng2?

Чи не здається, що в цьому офіційному довіднику стилів є щось щодо цього ?

Відповіді:


265

Суфікс $ (популяризований Cycle.js ) використовується для вказівки, що змінна є an спостережуваною . Це також може потрапити в офіційний посібник зі стилів, але його поки немає

Детальніше читайте тут: Що означає суфіксальний знак долара$ ?

Оновлення: докладніше про знак "$" читайте на веб-сайті 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
як щодо обіцянок?
галки

7
безпека роботи - зробіть код складнішим для розуміння для неспеціаліста.
java-addict301

14

Парадигма $ іменування виникла з Andre Saltz і пропонує множити всі назви змінних, що містять спостережувані або потоки.

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

Інший підхід полягає в множині імен змінних, що містять спостережувані або потоки з символом unicode, який відповідає останній букві слова. Це вирішує проблему зі словами, які не множині знаком "s".

mouse$ vs mic€

Жодна з цих конвенцій про іменування не міститься в офіційному посібнику зі стилю Angular. Використання того чи іншого (або жодного) повністю залежить від особистих уподобань.


10
cactu $ vs cactï
BYTE RIDER

Приємна довідка! Також ознайомтеся з цією статтею. Що мене дратує - це виявити спробу зробити це в моїй кодовій базі (інших колег) і помилитися, поставити суфікс на неправильну змінну або ще гірше запустити змінну з неї. Я бачив, як люди використовують це без послідовності, і в цьому випадку це абсолютно не має сенсу. medium.com/@benlesh/…
Ерік Бішард

Якщо ви користуєтесь ним, я рекомендую дотримуватися конвенцій про іменування, як у цій репортажі : github.com/bodiddlie/rxheroes/blob/master/app/effects/hero.ts А також робити це завжди або ніколи. Будьте послідовні заради спостережливого бога.
Ерік Бішард

2
fish$протиfish€$
Мартін Шнайдер

11

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

Оскільки кутові програми в основному написані в TypeScript, ви зазвичай знатимете, коли змінна є спостережуваною. Незважаючи на те, що кутова рамка не застосовує домовленості щодо спостереження за спостережуваними речовинами, ви часто побачите спостережувані імена зі знаком "$".

Це може бути корисно при скануванні коду та пошуку значень, що спостерігаються. Крім того, якщо ви хочете, щоб властивість зберігало останнє значення із спостережуваного, може бути зручно просто використовувати те саме ім'я з "$" або без нього.


Оригінал :

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

<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 для автоматичної підписки на видимі змінні

Я не знайшов цього в Посібнику зі стилів, оскільки вчора (6 грудня 2017 року) вийшов Angular5.1.


З посібника зі стилю Angular 9 heroes: Observable<Hero[]>;
Рікардо Сарачіно

9

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.