Angular 4使用subscribe将来自承诺的数据绑定到可观察到的不起作用
您好,我有一个PockDB服务,它检索一些数据并返回一个承诺。我想把这个承诺转换成一个可观察的,然后在ngOnInit中订阅,这样模型就会得到更新 我用一个返回可观察值的方法实现了一个服务,但它不起作用(数据不会反映在DOM上): 组件HTML:Angular 4使用subscribe将来自承诺的数据绑定到可观察到的不起作用,angular,observable,pouchdb,subscribe,Angular,Observable,Pouchdb,Subscribe,您好,我有一个PockDB服务,它检索一些数据并返回一个承诺。我想把这个承诺转换成一个可观察的,然后在ngOnInit中订阅,这样模型就会得到更新 我用一个返回可观察值的方法实现了一个服务,但它不起作用(数据不会反映在DOM上): 组件HTML: <h1>{{title}}</h1> <ul> <li *ngFor="let platform of platforms"> <a href="#">{{ platform }}
<h1>{{title}}</h1>
<ul>
<li *ngFor="let platform of platforms">
<a href="#">{{ platform }}</a>
</li>
</ul>
但这种方式就像作弊,因为我在DOM上强制更新
谁能告诉我我做错了什么
import 'rxjs/add/observable/fromPromise';
var subscription = Observable.fromPromise(your promise data);
subscription.subscribe(data => /* Do anything with data received */,
error => /* Handle error here */);
更新
var promise = this.platformsProvider.getPlatforms().then(platforms => {
return platforms.json();
});
return Observable.fromPromise(promise);
您没有正确地将服务注入组件 您需要在构造函数中将注入的服务添加到组件中 别忘了在模块中将服务添加到您的提供者中 摘自
从“/message.service”导入{MessageService};
...
构造函数(私有消息服务:消息服务){}
...
getHeroes():可观察{
//Todo:在抓到英雄后发送消息
this.messageService.add('HeroService:fetched heros');
英雄归来;
}
这里什么是Pocket db builder,您不能直接调用http get,它返回DefualtPockerDBBuilder可观察的值吗?它是一个自定义库,使用Xhr库而不是角度http进行自己的http调用。PlatformsDataProvider也做了同样的操作。我更改了getPlatforms(),所以我返回了Observable.fromPromise,但它也没有在DOM上显示更新的数据,只有在我使用“this.ngZone.run(()=>{this.platforms=platforms;})”,在suscribe之后它才能工作
ngOnInit() {
this.platformsService.getPlatforms().subscribe(platforms => {
this.ngZone.run(() => {
this.platforms = platforms;
});
});
}
import 'rxjs/add/observable/fromPromise';
var subscription = Observable.fromPromise(your promise data);
subscription.subscribe(data => /* Do anything with data received */,
error => /* Handle error here */);
var promise = this.platformsProvider.getPlatforms().then(platforms => {
return platforms.json();
});
return Observable.fromPromise(promise);
import { MessageService } from './message.service';
...
constructor(private messageService: MessageService) { }
...
getHeroes(): Observable<Hero[]> {
// Todo: send the message _after_ fetching the heroes
this.messageService.add('HeroService: fetched heroes');
return of(HEROES);
}