我正在尝试在 Angular 中构建一个简单的缓存服务;具有简单的 setter/getter 函数的服务,不同的组件可以从中获取数据。
不幸的是,当订阅此服务以获取数据时,订阅回调永远不会被调用,并且不会检索数据。
catch-service.service.js
import { Injectable } from '@angular/core';
import { Observable, from } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class CacheService {
cacheData: Observable<any>;
constructor() { }
setCacheData(data) {
this.cacheData = new Observable(data)
}
getCacheData() :Observable<any> {
return from(this.cacheData);
}
}
component.component.js
...
export class SomeComponent {
constructor(private cacheService: CacheService) { }
data = null;
ngOnInit() {
this.cacheService.getCacheData().subscribe(resp => {
console.log(resp);
this.data = resp;
});
}
...
我已将服务注入(inject)到模块类中,并且没有编译错误。组件中的数据从未被设置。
最佳答案
您可以执行如下操作
export class CacheService {
//create a method to set and get the cache
cacheData: Observable<any>
setCache: (cachedata: any) {
var newObservable = new Observable(observer => {
observer.next(cachedata);
observer.complete();
});
this.cacheData=newObservable;
}
getCacheData() :Observable<any>{
return this.cacheData;
}
在您的组件上,您可以像下面这样订阅。
service.getCacheData().susbcribe((data)=>{
//here you will get
});
您还可以查看下面的答案 observable 如何工作
关于Angular 6 - 无法订阅从服务返回的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53974873/