2017-09-01 115 views
0

我想創建一個模擬服務如下。 我的服務是一樣訂閱方法不適用於observable?

import { Injectable } from '@angular/core'; 
    import { URLSearchParams } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import { Config } from '../../shared/config/env.config'; 
import { HttpBaseService } from '../../shared/http-base/http-base.service'; 
import { ResponseModel } from '../../shared/models/index'; 
import { InventoryIntake } from './inventoryintake'; 

@Injectable() 
export class InventoryIntakeService { 
    list:InventoryIntake[]; 
    constructor(private http: HttpBaseService) { } 

    get(): Observable<ResponseModel<InventoryIntake[]>> { 
     this.list=[{ 
      supplier_name:"atami", 
      metric_reference:"55665589", 
      date_received:new Date("10-5-2017"), 
      date_transferred:new Date("15-5-2017") 
     }, 
     { 
      supplier_name:"green bits", 
      metric_reference:"4555589", 
      date_received:new Date("10-5-2017"), 
      date_transferred:new Date("15-5-2017") 
     }] 
     let response = new ResponseModel<InventoryIntake[]>(); 
     response.data = this.list; 
     console.log("called") 
     return Observable.create(response); 
    } 
} 

和成分,我呼籲像

import { Component, OnInit } from '@angular/core'; 
import { ActivatedRoute, Router } from '@angular/router'; 
import { URLSearchParams } from '@angular/http'; 
import { HttpBaseService } from '../../shared/http-base/http-base.service'; 
import {InventoryIntakeService} from './inventoryintake.service'; 
import {InventoryIntake} from './inventoryintake' 
@Component({ 
    moduleId: module.id, 
    selector: 'inventory-report', 
    templateUrl: './inventoryintake.component.html', 
    providers: [ HttpBaseService,InventoryIntakeService] 
}) 

export class InventoryIntakeComponent implements OnInit { 
    inventoryintake_list: InventoryIntake[] = []; 
    constructor(
     private route: ActivatedRoute, private router: Router,private InventoryIntakeService:InventoryIntakeService) { 
    } 

    getIntakeList(): void { 
     this.InventoryIntakeService.get() 
      .subscribe((inventoryintake_list) => { 
      this.inventoryintake_list = inventoryintake_list.data; 
      console.log(this.inventoryintake_list); 
     }) 
    } 

    ngOnInit(): void { 
     this.getIntakeList(); 
    } 
} 
} 

當我這樣做。 iam得到錯誤,說.subscribe不是一個函數。 我該如何解決這個問題?

如何創建一個可觀察返回類型的模擬服務? 問題是用可觀察的創建方法嗎?

+0

代碼'this.InventoryIntakeService.get()'甚至不應該編譯。請向我們展示更多的組件代碼,包括構造函數。 – 2017-09-01 06:25:50

+0

代碼已更新... –

回答

1

我不得不進口從觀察到

import { Observable } from 'rxjs/rx'; 

,而不是

import { Observable } from 'rxjs/Observable'; 

,然後我不得不使用

observable.of(response) 

這個固定我的問題。

3

請勿直接在InventoryIntakeService類上調用方法get()。在構造函數中創建服務的一個實例。

constructor(private inventoryIntakeService: InventoryIntakeService) {} 

getIntakeList(): void { 
    this.inventoryIntakeService.get() 
     .subscribe(inventoryintake_list => { 
      this.inventoryintake_list = inventoryintake_list.data; 
      console.log(this.inventoryintake_list); 
     }, 
    ); 
} 
+0

我在構造函數中使用它。 lik構造函數( 私人路由:ActivatedRoute,私有路由器:路由器,私有InventoryIntakeService:InventoryIntakeService) –

+0

它不是他回答 –

+0

不要將實例命名爲類!將其更改爲'構造函數(私有路由:ActivatedRoute,私有路由器:路由器,私有inventoryIntakeService:InventoryIntakeService){}',並讓我知道如果錯誤仍然存​​在。 @vishnuprasadkv –

0

Observable.create預計,作爲參數,當觀察者預訂可觀察時調用的功能。嘗試使用Observable.of來代替,將它傳遞給response