2017-09-07 10 views
1

角度4のコンポーネント間でデータを渡そうとしています。 input \ outputは使用したくありません。in Homecomponentサービスにデータをプッシュしたいと思っています。サービスからデータを取得したいのです。 私はちょうど観察可能なものと主題との道を見て、私は成功せずにそれを実装しようとしました。angle 4 input outputなしのコンポーネント間でデータを渡す

HomeComponent

import { ClientService } from './../clinet-service.service'; 
import { Component, OnInit } from '@angular/core'; 
@Component({ 
    selector: 'page-home', 
    template: 'pages/home/home.html', 
}) 
export class HomeComponent implements OnInit { 

    clients = ['john', 'jane'] 
    clientFound = false 

    // constructor(private navController: NavController) { } 
    constructor(private clientService: ClientService) { 

    } 

    openClient(client) { 
    } 
    ngOnInit() { 
    this.clientService.subject.next([ 
     { name: 'Harold', age: 35 } 
    ] 
    ); 

} 

} 

page2component

import { ClientService } from './../clinet-service.service'; 
import { Component } from '@angular/core'; 
@Component({ 
    selector: 'page-2', 
    template: '{{clients}}' 
}) 
export class Page2Component { 
    client:any; 

    constructor( private clientService: ClientService) { 

    } 

    ngOnInit(){ 
    debugger 
    let clients = this.clientService.observable.subscribe(clients => console.log(clients)); 
    } 
} 

clientService

import { Injectable, OnInit, OnDestroy } from '@angular/core'; 
import { Subject } from 'rxjs/Subject'; 
import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 
import { Observable } from "rxjs/Observable"; 

@Injectable() 

export class ClientService { 
    subject: Subject<any> = new Subject<any>(); 
    observable: Observable<any> = this.subject.asObservable(); 


} 

私がサービスに単純なことなプッシュデータを作成しようとするため、実際に私は、実装の仕方が好きではなかったです他のコンポーネントでそれを取得しますが、私はそれを行うことはできません。

+0

エラー –

+0

が何であるかを私はあなたが、コンソールには何も取得されていません –

+0

PAGE2で何も見えませんか? – Kyrsberg

答えて

3

複雑にする必要がないのでできません。ここでは、あなたが何をすべきかです:

HomeComponent

ngOnInit() { 
    this.clientService.subject.next([{ 
     {name: 'Harold', age: 35 }, 
     {name: 'Kumar', age: 40 }, 
    }]); 
} 

page2Component

ngOnInit(){ 
    let clients = this.clientService.observable.subscribe(clients => console.log(clients)); 
} 

サービス

export class ClientService { 

    subject: Subject<any> = new Subject<any>(); 
    observable: Observable<any> = this.subject.asObservable(); 

    constructor() {} 
} 
+0

私は親と子のプロジェクトでそれをやろうとしましたが、親の前に子が読み込まれていて、それが動作しないようにしました。 –

+0

あなたはサービスを嘲笑していると思います。あなたはクライアントを設定せず、ただ取得するので、この問題はありません。これを確認するには、clients変数を宣言する場所で直接サービス内のクライアントを設定します。 – trichetriche

+0

私はあなたのことをやろうとしました。アンダーファイリングを受けました。 –

1

HomeComponentデコレータが壊れています。外部テンプレートファイルを使用している場合は、templateの代わりにtemplateUrlを使用する必要があります。

間違っ

@Component({ 
    selector: 'page-home', 
    template: 'pages/home/home.html', 
}) 

正しい

@Component({ 
    selector: 'page-home', 
    templateUrl: 'pages/home/home.html', 
}) 

https://angular.io/api/core/Component

+0

私はそれを目的でちょうどURLのテキストを書く –

関連する問題