Как вернуть значение как наблюдаемое в угловых 6 - PullRequest
0 голосов
/ 05 марта 2019

Я хочу вернуть значение (любые данные) из сервиса в компонент как наблюдаемое.После пары копаний в наблюдаемых обнаружил следующее решение:

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 голосов
/ 05 марта 2019

Просто вернитесь, как показано ниже

import { Observable, of } from 'rxjs';

...

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

Надеюсь, эта помощь!

0 голосов
/ 05 марта 2019

Вот что я делаю

В вашем служебном файле:

Сначала я объявляю свою наблюдаемую таким образом

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

В методе вы можете установить свои данные в свойobs:

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

Если вы хотите, чтобы ваш "контроллер" подписывал эти obs, в вашем сервисе, просто выставьте получатель:

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

И в вашем "контроллере" вы можете позвонитьэто так:

 ngOnInit() {

this.myService.getMyObs().subscribe(datas => {
    Do What you want with your datas
  }
}
0 голосов
/ 05 марта 2019

Используйте of примерно так:

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

, что эквивалентно:

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

Однако, если вы хотите преобразовать данное значение (например, Promise, Observableкак массив, итеративный или массивоподобный объект) вы можете использовать from:

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