【问题标题】:How to return value as an observable in angular 6如何在角度 6 中将值作为可观察值返回
【发布时间】:2019-07-26 16:57:42
【问题描述】:

我想将值(任何数据)从服务返回到组件作为可观察对象。在对可观察对象进行了几次挖掘之后,发现了以下解决方案:

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
        });
    }
}

【问题讨论】:

  • return of(value)
  • 你已经找到答案了,这里的问题是什么?

标签: angular rxjs observable


【解决方案1】:

像这样使用of

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

相当于:

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

但是,如果您想转换给定值(例如,Promise、Observable-like、Array、iterable 或类似数组的对象),您可能需要使用from

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

【讨论】:

    【解决方案2】:

    像下面这样返回

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

    希望对您有所帮助!

    【讨论】:

    • 谢谢它的工作,你知道我是否需要做任何一种方式都意味着返回 observable 作为一个值;
    • 是的,您需要将 observable 作为值返回,以便您可以订阅 observable 以获取组件中的数据
    【解决方案3】:

    这就是我的工作

    在您的服务文件中:

    首先我以这种方式声明我的 observable

      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
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-27
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多