J'ai un service qui a cette méthode:
export class TestModelService {
public testModel: TestModel;
constructor( @Inject(Http) public http: Http) {
}
public fetchModel(uuid: string = undefined): Observable<string> {
if(!uuid) {
//return Observable of JSON.stringify(new TestModel());
}
else {
return this.http.get("http://localhost:8080/myapp/api/model/" + uuid)
.map(res => res.text());
}
}
}
dans le constructeur du composant, je m'abonne comme ceci:
export class MyComponent {
testModel: TestModel;
testModelService: TestModelService;
constructor(@Inject(TestModelService) testModelService) {
this.testModelService = testModelService;
testService.fetchModel("29f4fddc-155a-4f26-9db6-5a431ecd5d44").subscribe(
data => { this.testModel = FactModel.fromJson(JSON.parse(data)); },
err => console.log(err)
);
}
}
Cela fonctionne si un objet provient du serveur mais j'essaie de créer un observable qui fonctionnera avec l' subscribe()
appel donné pour une chaîne statique (cela se produit lorsque testModelService.fetchModel()
ne reçoit pas d'uuid), donc il y a une gestion transparente dans les deux cas.
typescript
promise
angular
observable
rxjs
Michail Michailidis
la source
la source
import { of } from 'rxjs';
et utilisezof
, au lieu deObservable.of
..map()
de résultat sur get, vous devez donc le faire.pipe(map((res:any) => res.json()))
. Voir ici: stackoverflow.com/a/35220045/986160Depuis juillet 2018 et la sortie de
RxJS 6
, la nouvelle façon d'obtenir un observable à partir d'une valeur consiste à importer l'of
opérateur comme suit:import { of } from 'rxjs';
puis créez l'observable à partir de la valeur, comme ceci:
of(someValue);
Notez que vous deviez faire
Observable.of(someValue)
comme dans la réponse actuellement acceptée. Il y a un bon article sur les autres changements de RxJS 6 ici .la source
Les choses semblent avoir changé depuis Angular 2.0.0
La
.next()
fonction sera appelée sur votre abonné.la source
of
fonction de rxjs, commeimport 'rxjs/add/observable/of'
C'est ainsi que vous pouvez créer une simple observable pour les données statiques.
J'espère que cette réponse est utile. Nous pouvons utiliser l'appel HTTP à la place des données statiques.
la source
De cette façon, vous pouvez créer Observable à partir de données, dans mon cas, je dois gérer le panier:
service.ts
Component.ts
la source