我有uiSettings服务,它将基于用户数据控制模板的各个部分(在不同的地方(。
目前我直接从模板中使用此服务。例如:
<li *ngIf="uiService.demoButton()">
<button [routerLink]="/demo" class="secondary">Demo</button>
</li>
在役:
demoButton():boolean {
return this.demoButtonAvailable;
}
上面的属性只有在用户发生变化时才会更新(登录、注销、更新..(,但模板每隔一秒左右就会调用uiService.demoButton((。
我相信有更好的方法(为了表现(。如果我使用observable,我会观察这个值,还是等待所需变量更新后触发事件?
当发生更改时,可以使用BehaviorSubject
和async
管道进行通知。然后,您可以使用changeDetectionStrategy: ChangeDetection.onPush
或分离changeDetectorRef
并手动检测更改。
ng如果条件在每次更改检测中都运行,则需要用一些条件变量包装它。例如
<li *ngIf="demoButtonAvailable">
<button (click)="uiService.demoButton()" class="secondary">Demo</button>
</li>
您只需像下面这样使用服务变量demoButtonAvailable
,
...
<li *ngIf="uiService.demoButtonAvailable">
<button [routerLink]="/demo" class="secondary">Demo</button>
</li>
...
如果我使用observable,我会观察这个值,还是等待所需变量更新后触发事件
对于简单的布尔值,不需要将Observable
与event
一起使用。是的,它每次都会触发,因为它是method call in the view
(不推荐(,但您可以使用服务布尔变量,除非您想要另一个包含服务数据的组件变量。