带有美元符号的属性?

来自Angular.io官方指南的父节点和子节点通过服务示例进行通信在Observable流名称中使用了美元符号。

注意下面例子中的missionAnnounced$missionConfirmed$:

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';


@Injectable()
export class MissionService {


// Observable string sources
private missionAnnouncedSource = new Subject<string>();
private missionConfirmedSource = new Subject<string>();


// Observable string streams
missionAnnounced$ = this.missionAnnouncedSource.asObservable();
missionConfirmed$ = this.missionConfirmedSource.asObservable();


// Service message commands
announceMission(mission: string) {
this.missionAnnouncedSource.next(mission);
}


confirmMission(astronaut: string) {
this.missionConfirmedSource.next(astronaut);
}
}

谁能解释一下:

  • 为什么使用$ ?这个符号背后的原因是什么?公共物品总是需要用这个吗?
  • 使用公共属性,但不使用方法(例如missionannouncement (), missionconfirmation())——同样,这是Angular2应用程序的约定吗?
148165 次浏览

我在风格指南中没有看到这个$,但我看到它经常用于引用可订阅的可观察对象的公共属性。

美元的后缀(由Cycle.js推广)用于指示变量是< >强可见< / >强。 它可能也会出现在官方的风格指南中,但它还没有

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

< >强更新: 在Angular网站上阅读更多关于尾随“$”符号的信息: https://angular.io/guide/rx-library#naming-conventions-for-observables < / p >

$命名范式起源于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的官方风格指南中。使用一种或另一种(或没有)完全取决于个人喜好。

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

因为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自动订阅Observable变量

自从昨天(2017年12月6日)Angular5.1发布以来,我就没有在风格指南中找到它。