Sono nuovo sia per Angular2 che per Rxjs e sono un po 'confuso su un caso particolare.Come si può simulare un http osservabile in Angular2 per quando non viene scritta alcuna API
Ho un semplice servizio:
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'));
}
}
E questo funziona come previsto, ma quello che vorrei fare è quello di essere in grado di sviluppare il mio servizio senza un endpoint api e l'utilizzo di un 'osservabile che posso tardi scambiare per il http.request
. Ho cercato di farlo usando Observable.from per convertire una matrice di dati fittizi a un osservabile ma ottengo gli errori
Type '{ id: number; title: string; content: string; author: string; }' is not assignable to type 'Article[]'
Credo che questo è perché sta tornando ogni elemento separatamente al posto del array, qualcuno mi può puntare nella direzione giusta di come questo dovrebbe funzionare
Aggiornamento: per chiarezza la dummyData assomigliare:
private dummyData = [
{
id: 1,
title: 'Title 1',
content: 'content 1',
author: 'author 1'
},
{
id:2,
title: 'Title 2',
content: 'content 2',
author: 'author 1'
}
];
Non sono sicuro che l'attuazione siete alla ricerca di , ma loadAll() potrebbe probabilmente essere solo loadAll() {this._article $ .next ([Articolo, Articolo]); } – JacobS
@JacobS così stavo seguendo insieme a https://coryrylan.com/blog/angular-2-observable-data-services e lui ha un api, stavo solo cercando di capire come evitare una richiesta http ma a continuare lo sviluppo usando un Observable dove potrei semplicemente inserire il sotto 'this.http.get ('$ {this.baseUrl}/articles')' successivamente con uno scambio diretto – jonnie
Ti iscriveresti ad un osservabile in entrambi i modi. Non gli importa di come i dati vengono inseriti nell'osservabile. Dovrebbe essere uno scambio pulito. Se si desidera mantenere la chiamata 'this.http', suggerirei in-memory-api -https: //www.npmjs.com/package/angular2-in-memory-web-api – JacobS