2017-11-10 13 views
0

サービスを使用して、コンポーネントから他のコンポーネントにデータを送信しています。角2サービスが値を返さない

私のサービスは

コンポーネントサービスから値を割り当てる取得する方法コンソール印刷[]上記の他

ngOnInit() { 
    this.homeValues = this.homeService.getValues(); 
    console.log(this.homeValues); 
} 

で値を取得

setType(type) { 
    this.values["plan"] = "HMO"; 
    this.homeService.setValues(this.values); 
} 

に値を設定する

import { 
    Injectable 
} from '@angular/core'; 

@Injectable() 
export class HomeService { 
    values = new Array(); 

    setValues(values): void { 
     this.values = values; 
    } 

    getValues(): any[] { 
     return this.values; 
    } 
} 

を次の?

答えて

3

あなたは

@Injectable() 
export class HomeService { 
    values:Observable<any> = []; 

    setValues(values): void { 
     this.values.next(value); 
    } 

    getValues(): Observable<any> { 
     return this.values.getValue(); 
    } 
} 

およびコンポーネントで観察を使用する必要があり、あなたはあなたがthis.values["plan"] = "HMO";と間違って何かをやっている

ngOnInit() { 
    this.homeService.values.subscribe(v => this.homeValues = v); 

} 
+0

私はSelectTypeComponent_Host.html来て、次のように試してみました:1エラーTypeError例外を:プロパティを読み取ることができませんが、未定義 – Veera

+0

の「購読する」(コンストラクタのように、あなたがHomeServiceをインポートし、コンストラクタでそれを定義していますプライベートhomeService:HomeService) – Mahmoud

0

を使用しています。

この行は、あなたのサービスにこの値を設定するとき、あなたが期待するように、それは、配列を保存しない作りと{plan:'HMO'}

のようなオブジェクトです。

この値を取得すると、空の配列が返されます。あなたができる

最初の変更は、あなたが、私は実際には配列を作るために言及した最初の行を変更する必要があります第二にsetValues

setValues(values:any[]): void { 
     this.values = values; 
} 

を入力することです。例えば

this.values = ["HMO"]; 
関連する問題