【发布时间】:2018-06-17 12:48:00
【问题描述】:
我知道您应该将(行为)主题用于可能随时间变化的值。但大多数时候,当我查看其他项目的源代码时,他们使用原始数据类型来更改值。
所以我的问题是,仅使用主题来改变这样的值有什么优点和缺点:
@Component({
selector: 'app-test',
template: `
<div>
<div *ngIf="isLoading | async">
<img src="loading.gif"/>
</div>
<div *ngIf="errorCode | async">
An error occurred. Please try again later.
</div>
<ng-container *ngIf="data | async; let jobs">
<div *ngFor="let job of jobs;">
{{ job.title }}
</div>
</ng-container>
</div>
`
})
export class TestComponent implements OnInit {
errorCode = new BehaviorSubject<number | null>(null);
isLoading = new BehaviorSubject<boolean>(true);
data = new BehaviorSubject<any>(null);
constructor(
public service: TestService,
) {}
public ngOnInit() {
this.isLoading.next(true);
this.getData();
}
public getData() {
this.service.getData().subscribe((data)=> {
this.data.next(data);
this.isLoading.next(false);
}, (error: HttpErrorResponse) => {
this.errorCode.next(error.status);
this.isLoading.next(false);
});
}
}
vs 使用像这样的原始数据类型:
@Component({
selector: 'app-test',
template: `
<div>
<div *ngIf="isLoading">
<img src="loading.gif"/>
</div>
<div *ngIf="errorCode">
An error occurred. Please try again later.
</div>
<ng-container *ngIf="data; let jobs">
<div *ngFor="let job of jobs;">
{{ job.title }}
</div>
</ng-container>
</div>
`
})
export class TestComponent implements OnInit {
errorCode : number | null = null;
isLoading : boolean = true;
data : any = null;
constructor(
public service: TestService,
) {}
public ngOnInit() {
this.isLoading = true;
this.getData();
}
public getData() {
this.service.getData().subscribe((data)=> {
this.data = data;
this.isLoading = false;
}, (error: HttpErrorResponse) => {
this.errorCode = error.status;
this.isLoading = false;
});
}
}
很抱歉问了这么一个笼统的问题,但是这个话题让我很难过,我找不到任何确凿的答案
【问题讨论】: