2016-06-27 4 views
9

मैं कोणीय 2 और आरएक्सजे दोनों के लिए नया हूं और मैं किसी विशेष मामले के बारे में थोड़ा उलझन में हूं।जब कोई एपीआई लिखा नहीं जाता है तो एंगुलर 2 में एक http को देखे जा सकते हैं

मैं एक साधारण सेवा है:

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')); 
    } 
} 

और यह अपेक्षा के अनुरूप काम करता है, लेकिन मुझे क्या करना चाहते हैं एक एपीआई endpoint के बिना मेरी सेवा को विकसित करने में सक्षम हो और एक नमूदार है कि मैं बाद में कर सकते हैं का उपयोग कर http.request के लिए स्वैप आउट करें। मैं Observable.from का उपयोग कर एक नमूदार को एक डमी डेटा सरणी परिवर्तित करने के लिए ऐसा करने की कोशिश की लेकिन मैं त्रुटियों मिल

Type '{ id: number; title: string; content: string; author: string; }' is not assignable to type 'Article[]'

मेरा मानना ​​है कि इस वजह से इसे अलग से करने के बजाय प्रत्येक आइटम लौटा रहा है सरणी, किसी को कैसे की सही दिशा में मुझे इंगित कर सकते हैं इस काम करना चाहिए

अद्यतन:

: स्पष्टता के लिए dummyData की तरह लग रहे
private dummyData = [ 
     { 
     id: 1, 
     title: 'Title 1', 
     content: 'content 1', 
     author: 'author 1' 
     }, 
     { 
     id:2, 
     title: 'Title 2', 
     content: 'content 2', 
     author: 'author 1' 
     } 
    ]; 
+0

मुझे यकीन है कि कार्यान्वयन आप देख रहे हैं नहीं कर रहा हूँ , लेकिन loadAll() शायद बस हो सकता है loadAll() {this._article $ .next ([आलेख, आलेख]); } – JacobS

+0

@JacobS इसलिए मैं https://coryrylan.com/blog/angular-2-observable-data-services के साथ पीछा कर रहा था और उसके पास एक एपीआई है, मैं बस यह समझने की कोशिश कर रहा था कि मैं http अनुरोध से कैसे बच सकता हूं लेकिन एक अवलोकनयोग्य का उपयोग करके विकास जारी रखें जहां मैं केवल 'this.http.get (' $ {this.baseUrl}/articles ') में उप-उप- – jonnie

+0

के साथ उप-उप-उपरोक्त में सदस्यता ले सकता हूं। आप किसी भी तरह से देखने योग्य की सदस्यता लेंगे। यह ध्यान नहीं देगा कि डेटा को देखने योग्य में कैसे धक्का दिया जाता है। यह एक साफ स्वैप होना चाहिए। यदि आप 'this.http' कॉल को बरकरार रखना चाहते हैं तो मैं इन-मेमोरी-एपीआई -https: //www.npmjs.com/package/angular2-in-memory-web-api – JacobS

उत्तर

4

आप उपयोग कर सकते हैं 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')); 
})); 

अद्यतन

परिभाषित dummyData की तरह:

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' 
     } 
    ]}; 
} 
+0

है, यह परीक्षण के लिए सही होगा और शायद मेरा प्रश्न पर्याप्त स्पष्ट नहीं है (मैं इसे सही कर दूंगा) लेकिन मैं जो करना चाहता हूं वह डमी डेटा से एक अवलोकन योग्य है जो http अनुरोध – jonnie

+0

के समान सब्सक्राइब का उपयोग कर सकता है, जो 'पर्यवेक्षण योग्य ** ** ** एक ही सदस्यता का उपयोग नहीं कर सकता है? आपका मतलब है कि आप 'data.json()' का उपयोग करके पेलोड प्राप्त कर सकते हैं। उद्देश्य क्या है? आप सामान्य कोड में 'मॉकबैकेंड' का उपयोग भी कर सकते हैं या 'इनमेमरीबैकेंड सेवा' का उपयोग https://angular.io/docs/ts/latest/tutorial/toh-pt6.html –

+0

में किया जा सकता था, मैं 'Observable.from (यह। dummyData) 'this.http.get ('$ {this.baseUrl}/articles') के बजाय। नक्शा (..) 'लेकिन प्रश्न – jonnie

संबंधित मुद्दे