Как написать функцию, которая будет возвращаться: Observable <ModelTemp> - PullRequest
0 голосов
/ 24 июня 2019

Как написать функцию, которая будет возвращаться: наблюдаемая.

мой сервис:

 modelTemp= [{ 
    name: 'abcdefghijk'
 }];   
 get(): Observable<ModelTemp> {
    return this.modelTemp;
 }

В сервисном методе переменная отображается красным цветом:

Возвращаемый тип выражения {name: string} [] нельзя назначить типу Observable less ... (Ctrl + F1) Проверяет TypeScript вызванные параметры функции, возвращаемые значения, присвоенные выражения для правильного типа

Как исправить эту ошибку?

мой компонент:

 model: ModelTemp; 

    constructor(private getService: GetService) {}
    ngOnInit() {
      this.generate();
    }

    generate() {
      this.getService.get()
        .subscribe((modelData) => { 
          this.model = modelData;
        });
    }

мой интерфейс:

   export interface ModelTemp {
      name: string; 
   }

Я не знаю, где я совершаю ошибку. Компонент модели должен быть объявлен по-другому (таким образом): modelPage: ModelPage; или так: modelPage: ModelPage [];

По моему браузер возвращает мне ошибку:

this.getService.get (...). Подписка не является функцией в TempComponent.push ../ src / app / temp / temp.component.ts.TempComponent.generate.

Я хочу использовать метод подписки. Который вернет модель (интерфейс ModelTemp)

Как исправить код?

Как написать функцию, которая будет возвращаться: Observable.

Ответы [ 4 ]

2 голосов
/ 24 июня 2019

используйте rxjs из , чтобы вернуть наблюдаемый

import {of} from 'rxjs';

 get(): Observable<ModelTemp> {
  return of(this.modelTemp);
} 
0 голосов
/ 25 июня 2019

метод: get(): Observable<ModelTemp> { return of(this.modelTemp); } сбросит ошибку: Type 'Observable<{ name: string; }[]>' is not assignable to type 'Observable<ModelTemp>'. Property 'name' is missing in type '{ name: string; }[]' but required in type 'ModelTemp'.

0 голосов
/ 24 июня 2019

Это зависит от того, какой контроль вам нужен для получения наблюдаемой наблюдаемой.

  • Если вам нужно только выполнить требование, чтобы уже известные данные были в наблюдаемой, то Фатех Мохамед имеет правильную идею в возвращении of(this.modelTemp) ,

  • Но если вам нужно будет генерировать будущие значения при изменении массива ModelTemp, тогда German Burgardt находится на лучшем пути, предоставив вам субъект, для которого вы можете вызвать behaviorSubject.next(newModelTemp), который будет излучать любому, кто подписался на вашу тему поведения . Вы также можете запретить другим вызывающим абонентам исходить из этого субъекта поведения, возвращая только результат behaviorSubject.asObservable() и оставляя субъект поведения закрытым.

  • Наконец, если массив ModelTemp содержит набор значений, которые должны быть последовательно выведены наблюдаемой, используйте from(this.modelTemp).

0 голосов
/ 24 июня 2019

Вы можете попробовать что-то вроде этого:

modelTemp: BehaviorSubject<ModelTemp[]> = new BehaviorSubject([{ 
    name: 'abcdefghijk'
}]);

get(): BehaviorSubject <ModelTemp[]> {
    return this.modelTemp;
}

Возвращает тему, на которую вы можете подписаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...