如何在角度6中将值作为可观察值返回

时间:2019-03-05 09:13:48

标签: angular rxjs observable

我想从服务到组件的返回值(任何数据)都是可观察的。在对可观察对象进行了两次挖掘之后,找到了以下解决方案:

class AppService {
    getData(value) {
        // do we have any other best way to return value as an observable
        return Observer.create((observer) => {
            observer.next(value);
        });
    }
}

class AppComponent implements OnInit {
    ngOnInit() {
        this.dataService$ = this.appService.getData().subscribe((data) => {
            // do some task with data
        });
    }
}

3 个答案:

答案 0 :(得分:2)

像这样使用of

import { of } from 'rxjs';
...
return of(value);

等效于:

return new Observable(obs => obs.next(value));

但是,如果要转换给定值(例如Promise,类似Observable的对象,Array,可迭代的对象或类似数组的对象),则可能要使用from

import { from } from 'rxjs';
...
return from(value);

答案 1 :(得分:2)

只需返回以下内容

import { Observable, of } from 'rxjs';

...

getData(value) : Observable<any> {
   // Simple way of sending value using of operator.
   return Observable.of(value);
}

希望获得帮助!

答案 2 :(得分:0)

这就是我要做的

在您的服务文件中:

首先,我以这种方式宣布我的观察力

  myObs: BehaviorSubject<any> = new BehaviorSubject([]);

您可以通过一种方法将数据设置到obs中:

var myArray = [1,2,3,4,5];
this.myObs.next(myArray);

如果您希望您的“控制器”订阅此obs,请在您的服务中公开一个getter:

public getMyObs(){
return this.myObs.asObservable()
}

在“控制器”中,您可以这样称呼它:

 ngOnInit() {

this.myService.getMyObs().subscribe(datas => {
    Do What you want with your datas
  }
}