Angular 7中的$符号代表什么?

8

我在变量声明方面有些困惑。

heroes$中的$是什么意思?

Angular 4

export class HeroSearchComponent implements OnInit {
heroes: Observable<Hero[]>;
private searchTerms = new Subject<string>();

constructor(
 private heroSearchService: HeroSearchService,
 private router: Router) {}

Angular 7+

 export class HeroSearchComponent implements OnInit {
 heroes$: Observable<Hero[]>;
 private searchTerms = new Subject<string>();
 constructor(private heroService: HeroService) {}

     // Push a search term into the observable stream.
          search(term: string): void {
          console.log(term);
            this.searchTerms.next(term);
        }
  • 我在Angular 7版本中有些困惑,其中heroes变量被赋值为$符号。

  • 我试图从变量中删除$符号,但代码不起作用。

  • 欢迎任何建议。

1个回答

13
这是关于 Observables 遵循的一种约定。以下是Angular 文档对此的说明:

因为 Angular 应用程序大多是用 TypeScript 编写的,所以您通常会知道一个变量是否是 Observable。虽然 Angular 框架不强制要求使用特定的命名约定来表示 Observable,但通常会看到 Observable 的名称以尾部的“$”符号结尾。

这在扫描代码并查找 Observable 值时非常有用。此外,如果您想要一个属性来存储 Observable 的最新值,只需使用相同的名称即可,无论是否带有“$”,都很方便。

不遵循这种约定并没有什么害处。但既然这是一种建议,遵循它是件好事。

更新

约定随着开发人员过去的经验而不断演变。这个约定是2018年1月10日提交的

所以,这个约定是在 Angular 5 后添加到文档中的,很有可能在工作中使用 Angular 4 时您没有使用过它。

另外,在 Angular 5 升级到 Rxjs 5.5 后(不确定确切的版本),Rxjs 的语法也发生了重大变化。因此,您可能需要检查 Rxjs 的语法如何随着时间的推移而改变。有一个很棒的工具可以帮助您完成这项任务。请查看RxJS Explorer 2.0:学习、比较、更新。


2
这取决于变量的名称。如果您有 $ 后缀,则该变量的每个地方都应该带有 $ 后缀。它可能不起作用,因为您忘记从模板中删除 $,在那里您使用了此变量,可能是使用 async 管道。如果您仍然感到困惑,请创建一个示例 StackBlitz 来复制此问题,以便我可以弄清楚实际问题是什么。 - SiddAjmera
但是在Angular 4中,当与Observables一起使用时,没有$约定。 - afeef
它仍然没有解决我的疑惑,我曾经使用过Angular 4,但当我升级到版本7时,语法上存在混淆。 - afeef
谢谢Sidd,这意味着rxjs在其库中更改了一些语法,我正在使用"rxjs": "6.3.3"。 - afeef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接