将服务器的数据设置为 class 的 属性 angular 2
set data from server to class's property angular 2
我想将数据从 observable 设置为 属性。但需要时间来回应卷土重来。所以 属性 设置为 undefined
。如何设置从服务器到 class 属性
的数据
ngOnInit() {
this.comics.getChar().subscribe((responses: Response) => this.data = responses[1].json().data.results);
this.comicsList = this.data; // gives undefined
console.log(this.comicsList);
}
您不了解异步函数的工作原理 运行。
这一行:
this.comics.getChar().subscribe((responses: Response) => this.data = responses[1].json().data.results);
不会 "finish" 在进入此行之前:
this.comicsList = this.data; // gives undefined
第一行开始执行,无论第一行是否完成,都立即执行下一行。这就是异步执行的本质,你不知道它什么时候会完成,所以不依赖于它的其他一切都会继续执行。但是,在这种情况下,您的第二行明确取决于响应,因此您需要对其进行设置,使其 运行 仅在您收到响应后:
this.comics.getChar().subscribe((responses: Response) => {
this.data = responses[1].json().data.results;
this.comicsList = this.data;
});
这有点多余,除非你有理由维护这个列表的两个引用,否则我可能会直接在订阅中设置 comicsList。
虽然我什至可能不会那样做,但我会这样做:
this.comicsList$ = this.comics.getChar().map(responses => responses[1].json().data.results);
在我需要这些数据的模板中,我会使用异步管道进行订阅。
<div *ngFor="let comic of comicsList$ | async">{{ comic }}</div>
我想将数据从 observable 设置为 属性。但需要时间来回应卷土重来。所以 属性 设置为 undefined
。如何设置从服务器到 class 属性
ngOnInit() {
this.comics.getChar().subscribe((responses: Response) => this.data = responses[1].json().data.results);
this.comicsList = this.data; // gives undefined
console.log(this.comicsList);
}
您不了解异步函数的工作原理 运行。
这一行:
this.comics.getChar().subscribe((responses: Response) => this.data = responses[1].json().data.results);
不会 "finish" 在进入此行之前:
this.comicsList = this.data; // gives undefined
第一行开始执行,无论第一行是否完成,都立即执行下一行。这就是异步执行的本质,你不知道它什么时候会完成,所以不依赖于它的其他一切都会继续执行。但是,在这种情况下,您的第二行明确取决于响应,因此您需要对其进行设置,使其 运行 仅在您收到响应后:
this.comics.getChar().subscribe((responses: Response) => {
this.data = responses[1].json().data.results;
this.comicsList = this.data;
});
这有点多余,除非你有理由维护这个列表的两个引用,否则我可能会直接在订阅中设置 comicsList。
虽然我什至可能不会那样做,但我会这样做:
this.comicsList$ = this.comics.getChar().map(responses => responses[1].json().data.results);
在我需要这些数据的模板中,我会使用异步管道进行订阅。
<div *ngFor="let comic of comicsList$ | async">{{ comic }}</div>