Je suis nouveau chez Angular2 et Rxjs et je suis un peu confus à propos d'un cas particulier.
J'ai un service simple:
import { Injectable } from '@angular/core'; import { Observable, Subject } from 'rxjs/Rx'; import { Http, Response } from '@angular/http'; export interface Article { id: number; title: string; content: string; author: string; } @Injectable() export class ArticleService { private _articles$: Subject<Article[]>; private baseUrl: string; private dataStore: { articles: Article[] }; constructor(private http: Http) { this.baseUrl = 'http://localhost:3000' this.dataStore = { articles: [] }; this._articles$ = <Subject<Article[]>>new Subject(); } get articles$(){ return this._articles$.asObservable(); } loadAll(){ //Observable.from(this.dummyData) this.http.get(`${this.baseUrl}/articles`) .map(response => response.json()) .subscribe(data => { //debugger; this.dataStore.articles = data; // Push a new copy of our article list to all Subscribers. this._articles$.next(this.dataStore.articles) }, error => console.log('Could not load Articles')); } }
Et cela fonctionne comme prévu, mais ce que j'aimerais faire, c'est de pouvoir développer mon service sans un point de terminaison d'api et d'utiliser un Observable que je peux échanger plus tard pour la http.request
. J'ai essayé de le faire en utilisant Observable.from pour convertir un tableau de données fictif en un observable mais j'ai les erreurs
Type '{ id: number; title: string; content: string; author: string; }' is not assignable to type 'Article[]'
- Quand utiliser des étiquettes @ angulaires dans Angular 2?
- Passer la valeur entre deux fichiers dactylographiés à composants angulaires2
- Comment créer un TabView avec l'icône et le titre comme l'image que j'ai attachée ci-dessous en utilisant NativeScript?
- Qu'est-ce que store.select dans ngrx
- La requête angulaire 2 Http n'émet pas d'informations d'identification
Je crois que c'est parce qu'il renvoie chaque élément séparément au lieu du tableau, quelqu'un peut-il me dire dans la bonne direction comment cela devrait fonctionner?
Mise à jour : pour plus de clarté, le DummyData ressemble à:
private dummyData = [ { id: 1, title: 'Title 1', content: 'content 1', author: 'author 1' }, { id:2, title: 'Title 2', content: 'content 2', author: 'author 1' } ];
Vous pouvez utiliser MockBackend
import {BaseRequestOptions, Http} from '@angular/http'; import {MockBackend} from '@angular/http/testing'; it('should get some data', inject([AsyncTestCompleter], (async) => { var connection; var injector = Injector.resolveAndCreate([ MockBackend, {provide: Http, useFactory: (backend, options) => { return new Http(backend, options); }, deps: [MockBackend, BaseRequestOptions]}]); var http = injector.get(Http); var backend = injector.get(MockBackend); //Assign any newly-created connection to local variable backend.connections.subscribe(c => connection = c); http.request('data.json').subscribe((res) => { expect(res.text()).toBe('awesome'); async.done(); }); connection.mockRespond(new Response('awesome')); }));
Mettre à jour
Définissez le dummyData
comme:
private dummyData = { json: function() { return [ { id: 1, title: 'Title 1', content: 'content 1', author: 'author 1' }, { id:2, title: 'Title 2', content: 'content 2', author: 'author 1' } ]}; }