gpt4 book ai didi

angular - 将您的 RxJS 主题暴露给 "safe"是不是 "outside world"

转载 作者:太空狗 更新时间:2023-10-29 18:04:26 27 4
gpt4 key购买 nike

我读了这篇好文章 Angular onPush Change Detection Strategy

在某个时候他写道:

It’s an anti-pattern to expose your subject to the outside world, always expose the observable, by using the asObservable() method.

但他没有解释原因。这是否意味着我不应该做这样的事情?

export class ExampleComponent {

public drawerTrigger$ = new Subject<{}>();
}

在 HTML 中

  <button  class="hamburgher-button" type="button"
(click)="drawerTrigger$.next($event)">
<i >menu</i>
</button>

如果不是,哪个是正确的方法?

最佳答案

一般来说,您不应该公开Subject,因为这会让任何使用您的服务的人都有可能不受控制地调用drawerTrigger$.next(),即使在不正确​​的用例中也是如此.

甚至最糟糕的情况是任何人都可以使用drawerTrigger$.error()drawerTrigger$.complete()。 Subjects 有内部状态,如果它们发出 errorcomplete Subject 被标记为停止并且永远不会发出任何东西。如果您公开了您的 Subject,那么您就允许任何人发出这些通知。

官方推荐的从 TypeScript 类公开 Subjects 的方法只是强制它们的类型为 Observable。您不需要使用 asObservable()(RxJS 本身并不在其代码库的任何地方内部使用 asObservable()):

export class ExampleComponent {
private drawerTriggerSubject = new Subject<{}>();
public drawerTrigger$: Observable<{}> = this.drawerTriggerSubject;
}

关于angular - 将您的 RxJS 主题暴露给 "safe"是不是 "outside world",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52222991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com