angular2风格指南 - 有美元符号的财产?

ger*_*lus 156 angular

查看angular2代码示例,我们看到一些带有$ sign的公共属性:

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

谁能解释一下:

  • 为什么使用$(这种表示法背后的原因是什么?总是将它用于公共财产)?
  • 使用公共属性但不使用方法(例如missionAnnouncements(),missionConfirmations()) - 再次,这是ng2应用程序的约定吗?

在官方风格指南中似乎没有任何相关内容吗?

Mon*_*red 222

$ suffix(由Cycle.js推广)用于表示变量是Observable.它也可以成为官方风格指南,但它还没有

在这里阅读更多内容:后缀美元符号$是什么意思?

更新: 在此处阅读更多关于Angular网站上尾随"$"符号的信息:https: //angular.io/guide/rx-library#naming-conventions-for-observables

  • @EricBishard你的意思是100美元 (37认同)
  • 角度文档中的参考:https://angular.io/guide/rx-library#naming-conventions-for-observables (11认同)
  • 工作安全性-使外行人更难以理解代码。 (4认同)
  • 它不会成为官方风格指南.我会把100美元放在那上面. (3认同)
  • 承诺呢? (2认同)

Raq*_*iaz 13

$命名范例源于Andre Saltz,并建议复数包含可观察量或流的所有变量名称.

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

另一种方法是复制包含observable或stream的变量名,其中unicode字符与单词的最后一个字母相匹配.这解决了使用"s"不复数的单词的问题.

mouse$ vs mic€
Run Code Online (Sandbox Code Playgroud)

这些命名约定都不在官方Angular样式指南中.使用一个或另一个(或没有)完全取决于个人偏好.

  • cactu $vscactï (8认同)
  • `fish$` 与 `fish€$` (3认同)
  • 现在可以在官方文档中找到可观察量的命名约定:https://angular.io/guide/rx-library#naming-conventions-for-observables (3认同)

Gün*_*uer 8

我没有$在样式指南中看到过这个,但我看到它经常被用于引用可以订阅的可观察对象的公共属性.


Hai*_*ang 8

更新: https ://angular.io/guide/rx-library#naming-conventions-for-observables

由于Angular应用程序主要使用TypeScript编写,因此通常会知道变量何时是可观察的.尽管Angular框架没有强制执行可观察对象的命名约定,但您经常会看到以带有"$"符号命名的observable.

在扫描代码并查找可观察值时,这非常有用.此外,如果您希望属性存储来自observable的最新值,则可以方便地使用带有或不带"$"的相同名称.


原文:

$在阅读官方英雄教程时,我看到变量结束了:

<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>
Run Code Online (Sandbox Code Playgroud)

仔细观察,你会发现*ngFor遍历一个叫做的名单heroes$,而不是英雄.

<li *ngFor="let hero of heroes$ | async" >
Run Code Online (Sandbox Code Playgroud)

$是一个约定,表示英雄$是一个Observable,而不是一个数组.

大多数情况是我们不在组件中订阅那些Observable变量.我们通常使用AsyncPipe自动订阅Observable变量

自Angular5.1于昨天(2017年12月6日)发布以来,我还没有在Style Guide中找到它.