Angular 2 ngrx 可观察值
Angular 2 ngrx Observable value
在我的商店中,我有 isLoading: 布尔值,它是 false 并在对服务器的请求启动时更改为 true,在响应或出错后更改回 false。我 select 它在容器 class 中并作为 属性 传递给组件,如下所示:
@Component({
template: `<some-component [isLoading]="isLoading"></some-component>`
})
class SomeContainer() {
private isLoading: Observable<boolean>;
constructor(private store: Store<IStore>) {
this.isLoading = store.select(isLoadingSelector);
}
}
而且我想将它用于一些有条件的内容:
class SomeComponent {
@Input() private isLoading: Observable<boolean>;
...
}
<div>
<span *ngIf="isLoading">Loading</span>
<span *ngIf="!isLoading">Some data</span>
</div>
但是 isLoading 是 Observable 的,我必须为这个逻辑的预期工作获取布尔值。我找到的解决方案是像这样在 class 中获取价值:
private ngOnInit():void {
this.isLoading.subscribe((value) => this.isLoadingBoolean = value);
}
并在模板中使用 isLoadingBoolean。
但这看起来很棘手。有没有更好的方法来解决这个问题(也许是将 async
管道与 *ngIf 一起使用的方法)?
您可以在 SomeContainer
:
中使用 async
管道
@Component({
template: `<some-component [isLoading]="isLoading | async"></some-component>`
})
class SomeContainer() {
private isLoading: Observable<boolean>;
constructor(private store: Store<IStore>) {
this.isLoading = store.select(isLoadingSelector);
}
}
并且您的 SomeComponent
可以简化为使用 boolean
输入:
@Component({
template: `
<div>
<span *ngIf="isLoading">Loading</span>
<span *ngIf="!isLoading">Some data</span>
</div>
`
})
class SomeComponent {
@Input() private isLoading: boolean;
...
}
通常,处理容器中的可观察对象是个好主意,这样组件就可以 'dumb' - 请参阅 "Presentational and Container Components"。
在我的商店中,我有 isLoading: 布尔值,它是 false 并在对服务器的请求启动时更改为 true,在响应或出错后更改回 false。我 select 它在容器 class 中并作为 属性 传递给组件,如下所示:
@Component({
template: `<some-component [isLoading]="isLoading"></some-component>`
})
class SomeContainer() {
private isLoading: Observable<boolean>;
constructor(private store: Store<IStore>) {
this.isLoading = store.select(isLoadingSelector);
}
}
而且我想将它用于一些有条件的内容:
class SomeComponent {
@Input() private isLoading: Observable<boolean>;
...
}
<div>
<span *ngIf="isLoading">Loading</span>
<span *ngIf="!isLoading">Some data</span>
</div>
但是 isLoading 是 Observable 的,我必须为这个逻辑的预期工作获取布尔值。我找到的解决方案是像这样在 class 中获取价值:
private ngOnInit():void {
this.isLoading.subscribe((value) => this.isLoadingBoolean = value);
}
并在模板中使用 isLoadingBoolean。
但这看起来很棘手。有没有更好的方法来解决这个问题(也许是将 async
管道与 *ngIf 一起使用的方法)?
您可以在 SomeContainer
:
async
管道
@Component({
template: `<some-component [isLoading]="isLoading | async"></some-component>`
})
class SomeContainer() {
private isLoading: Observable<boolean>;
constructor(private store: Store<IStore>) {
this.isLoading = store.select(isLoadingSelector);
}
}
并且您的 SomeComponent
可以简化为使用 boolean
输入:
@Component({
template: `
<div>
<span *ngIf="isLoading">Loading</span>
<span *ngIf="!isLoading">Some data</span>
</div>
`
})
class SomeComponent {
@Input() private isLoading: boolean;
...
}
通常,处理容器中的可观察对象是个好主意,这样组件就可以 'dumb' - 请参阅 "Presentational and Container Components"。