我正在尝试使用"主题" angular2中的类,用于将事件作为可观察对象,从服务广播到所有具有该服务实例的组件。
在我的服务中,我有以下内容:
private loggedIn = new Subject<boolean>();
isUserLoggedIn(): Observable<boolean>
{
return this.loggedIn.asObservable();
}
test()
{
this.loggedIn.next(true);
}
然后在使用此服务的组件中,我(_auth与上面定义的服务相同):
ngOnInit()
{
console.log("yay!");
this._auth.isUserLoggedIn()
.subscribe(
d => {
console.log(d);
},
d => {
console.log(d);
},
() => {
console.log("Done!");
}
);
}
现在的问题是,如果我从同一个组件中调用服务的方法this._auth.test();
,一切正常,并且console.log行在此组件中执行。但是,如果从另一个组件调用该服务的方法,则不会触发此组件来运行console.log行。
即使服务的方法是由另一个组件触发,如何确保此组件中的代码运行? (假设两个组件同时呈现)。
谢谢!
答案 0 :(得分:2)
不要在每个组件上提供服务,只提供
<tr *ngFor="let this_user of RoleUsers.Users">
...
<th scope="row" *ngIf="UsersToRemove.InAction">
<label class="custom-control custom-checkbox mb-2 mr-sm-2 mb-sm-0">
<input type="checkbox" class="custom-control-input" (change)="AddOrRemoveUser (this_user, $event.target.checked)" /> <!--[(ngModel)]="" --> <!-- ng-false-value="expression"-->
<span class="custom-control-indicator"></span>
</label>
</th>
...
</tr>
否则为每个组件(对于每个提供者)创建一个新的服务实例