1
votes

Comment écrire une fonction qui sera retournée: Observable

Comment écrire une fonction qui sera retournée: Observable.

mon service:

   export interface ModelTemp {
      name: string; 
   }

En service la méthode la variable est affichée en rouge:

Le type d'expression renvoyé {name: string} [] n'est pas assignable au type Observable less ... (Ctrl + F1) Vérifie TypeScript appelé les paramètres de fonction, les valeurs de retour, les expressions assignées pour être de type correct

Comment corriger cette erreur?

mon composant:

 model: ModelTemp; 

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

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

mon interface:

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

Je ne sais pas où je fais une erreur. Le composant de modèle doit être déclaré différemment (de cette manière): modelPage: ModelPage; ou alors: modelPage: ModelPage [];

Dans mon navigateur, le navigateur me renvoie une erreur:

this.getService.get (...). subscribe n'est pas une fonction chez TempComponent .push ../ src / app / temp / temp.component.ts.TempComponent.generate.

Je veux utiliser la méthode subscribe. Qui retournera le modèle (interface ModelTemp)

Comment corriger le code?

Comment écrire une fonction qui sera retournée: Observable.


0 commentaires

4 Réponses :


3
votes

utiliser des opérateurs rxjs comme of pour renvoyer un observable

import {of} from 'rxjs';

 get(): Observable<ModelTemp> {
  return of(this.modelTemp);
} 


0 commentaires

0
votes

Vous pouvez essayer quelque chose comme ceci:

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

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

Cela renvoie un sujet auquel vous pouvez vous abonner.


0 commentaires

0
votes

Cela dépend du type de contrôle dont vous avez besoin sur l'observable résultant.

  • Si vous avez seulement besoin de satisfaire une exigence selon laquelle les données déjà connues doivent être dans un observable, alors Fateh Mohamed a la bonne idée de renvoyer un de (this.modelTemp) .

  • Mais si vous devez émettre des valeurs futures à mesure que le tableau ModelTemp change, alors Burgardt allemand est sur un mieux suivre en vous fournissant un sujet sur lequel vous pouvez appeler behaviorSubject.next (newModelTemp) qui émettra à toute personne qui s'est abonnée à votre Sujet du comportement . Vous pouvez également empêcher d'autres appelants d'émettre à partir de ce sujet de comportement en renvoyant uniquement le résultat de behaviorSubject.asObservable () et en gardant le sujet de comportement lui-même privé.

  • Enfin, si le tableau ModelTemp contient un ensemble de valeurs qui doivent être émises successivement par l'observable, utilisez de (this.modelTemp) .


0 commentaires

0
votes

la méthode: get (): Observable {return of (this.modelTemp); } réinitialisera l'erreur: Tapez 'Observable <{name: string; } []> 'n'est pas attribuable au type' Observable '. La propriété 'nom' est manquante dans le type '{nom: chaîne; } [] 'mais requis dans le type' ModelTemp '.


0 commentaires