guide de style angular2 - propriété avec signe dollar?

185

En regardant l'exemple de code angular2 , nous voyons quelques propriétés publiques avec $ sign:

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

Quelqu'un peut-il expliquer:

  • pourquoi $ est utilisé (quelle est la raison derrière cette notation? utilisez toujours ceci pour les propriétés publiques)?
  • les propriétés publiques sont utilisées mais pas les méthodes (par exemple missionAnnouncements (), missionConfirmations ()) - encore une fois, est-ce une convention pour les applications ng2?

Il ne semble pas y avoir quoi que ce soit à ce sujet dans le guide de style officiel ?

Gerasalus
la source

Réponses:

265

$ suffix (popularisé par Cycle.js ) est utilisé pour indiquer que la variable est un observable . Cela pourrait également figurer dans le guide de style officiel, mais ce n'est pas encore là

En savoir plus ici: Que signifie le signe dollar suffixé $?

Mise à jour: En savoir plus sur le signe «$» de fin sur le site Web Angular ici: https://angular.io/guide/rx-library#naming-conventions-for-observables

Monfa.red
la source
4
Il ne figurera pas dans le guide de style officiel. Je vais mettre 100 $ là-dessus.
Eric Bishard
15
Référence dans les docs angulaires: angular.io/guide/rx-library#naming-conventions-for-observables
michelepatrassi
66
@EricBishard Vous voulez dire 100 $
TabsNotSpaces
1
qu'en est-il des promesses?
galki
7
sécurité de l'emploi - rendre le code plus difficile à comprendre pour le profane.
java-addict301
14

Le paradigme de nommage $ est né avec Andre Saltz et suggère de mettre au pluriel tous les noms de variables contenant des observables ou des flux.

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

Une autre approche consiste à mettre au pluriel les noms de variables contenant des observables ou des flux avec un caractère Unicode correspondant à la dernière lettre du mot. Cela résout le problème avec les mots qui ne sont pas au pluriel avec un "s".

mouse$ vs mic€

Aucune de ces conventions de dénomination ne figure dans le guide de style angulaire officiel. L'utilisation de l'un ou de l'autre (ou aucun) dépend entièrement de la préférence personnelle.

Raquel Diaz
la source
10
cactu $ vs cactï
BYTE RIDER
Belle référence! Consultez également cet article. Ce qui m'ennuie, c'est de trouver une tentative pour faire cela dans ma base de code (d'autres collègues) et de me tromper, de mettre le suffixe sur la mauvaise variable ou pire encore de commencer la variable avec elle. J'ai vu des gens utiliser cela sans cohérence également, dans ce cas, cela n'a absolument aucun sens. medium.com/@benlesh/…
Eric Bishard
Si vous devez l'utiliser, je vous recommande de suivre les conventions de dénomination comme dans ce dépôt : github.com/bodiddlie/rxheroes/blob/master/app/effects/hero.ts Et de le faire toujours ou jamais. Soyez cohérent pour l'amour du dieu observable.
Eric Bishard
2
fish$vsfish€$
Martin Schneider
11

Mise à jour : https://angular.io/guide/rx-library#naming-conventions-for-observables

Étant donné que les applications angulaires sont principalement écrites en TypeScript, vous saurez généralement quand une variable est une observable. Bien que le framework Angular n'applique pas de convention de dénomination pour les observables, vous verrez souvent des observables nommés avec un signe «$» à la fin.

Cela peut être utile lors de l'analyse du code et de la recherche de valeurs observables. De plus, si vous souhaitez qu'une propriété stocke la valeur la plus récente d'une observable, il peut être pratique d'utiliser simplement le même nom avec ou sans le «$».


Original :

J'ai vu les variables se terminer par $en lisant le tutoriel officiel des héros:

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

Regardez attentivement et vous verrez que le * ngFor itère sur une liste appelée heroes$, pas des héros .

<li *ngFor="let hero of heroes$ | async" >

Le $ est une convention qui indique que les héros $ est un observable, pas un tableau.

La plupart des cas sont que nous ne souscrivons pas à ces variables observables dans le composant. Nous utilisons généralement AsyncPipe pour nous abonner automatiquement aux variables observables

Je ne l'ai pas trouvé dans Style Guide depuis la sortie d'Angular5.1 hier (6 décembre 2017).

Haifeng Zhang
la source
De Angular 9 style guideheroes: Observable<Hero[]>;
Ricardo Saracino
9

Je n'ai pas vu cela $dans le guide de style, mais je l'ai vu fréquemment utilisé pour les propriétés publiques qui se réfèrent à des observables auxquelles on peut souscrire.

Günter Zöchbauer
la source