ALG*_*GDB 3 rxjs typescript angular
我读了一篇关于Angular onPush Change Detection Strategy的好文章
他在写道:
这是一种反对模式,通过使用asObservable()方法将您的主题暴露给外部世界,始终暴露可观察对象.
但他没有解释原因.这是否意味着我不应该做这样的事情?
export class ExampleComponent {
public drawerTrigger$ = new Subject<{}>();
}
Run Code Online (Sandbox Code Playgroud)
并在HTML中
<button class="hamburgher-button" type="button"
(click)="drawerTrigger$.next($event)">
<i >menu</i>
</button>
Run Code Online (Sandbox Code Playgroud)
如果不是,这是正确的方法吗?
mar*_*tin 12
一般情况下,您不应暴露Subject
s,因为这使得任何使用您的服务的人都可能无法控制地调用,drawerTrigger$.next()
即使在不正确的用例中也是如此.
即使是最糟糕的情况,任何人都可以使用drawerTrigger$.error()
或drawerTrigger$.complete()
.主体具有内部状态,如果它们发射error
或者complete
主体被标记为停止并且永远不会发射任何东西.如果您公开了Subject
那么你就让任何人发出这些通知.
官方推荐的从TypeScript类公开Subjects的方法只是强制它们的类型Observable
.您不需要使用asObservable()
(RxJS本身不在asObservable()
其代码库中的任何地方使用):
export class ExampleComponent {
private drawerTriggerSubject = new Subject<{}>();
public drawerTrigger$: Observable<{}> = this.drawerTriggerSubject;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
617 次 |
最近记录: |