【发布时间】:2018-04-01 11:03:40
【问题描述】:
我的主要AppComponent 中有一个微调器组件,如下所示:template: <app-spinner></app-spinner>。这是微调器组件:
@Component({
selector: 'app-spinner',
template: `
<div *ngIf="spinner.isVisible() | async" class="spinner">
<div class="loading"></div>
</div>
`
})
export class SpinnerComponent {
constructor(public spinner: SpinnerService) {}
}
这里是微调器服务:
@Injectable()
export class SpinnerService {
private visible$ = new BehaviorSubject < boolean > (false);
show() {
this.visible$.next(true);
}
hide() {
this.visible$.next(false);
}
isVisible(): Observable < boolean > {
return this.visible$.asObservable().pipe(share());
}
}
我可以通过注入 SpinnerService 并调用 show()... 轻松地显示来自任何组件的微调器...但是我还希望能够在任何组件中执行以下操作:
<div *ngIf="userObservable | async as user; else loading">
Hello {{user.name}}!
</div>
<ng-template #loading>Somehow do something here to set the spinner visibility and switch it off later?!</ng-template>
我也非常愿意使用全局注入变量而不是Subject。有什么想法吗?
提示:我们能否以某种方式定义“全局template reference variable”之类的东西?!
【问题讨论】:
标签: angular observable angular2-template angular-ng-if