2017-10-12 8 views
-1

私の4番目のプロジェクトに問題があります。変数を親コンポーネントに送信する方法

export class AppComponent { 
    public user: User = null; 
} 

彼のHTMLは次のとおりです: 私の主なコンポーネントは、変数のユーザーを持っている

{{user.name}} 
<router-outlet></router-outlet> 

代わりにルータ-コンセントの私は、ユーザーの値を変更する子要素を持っている私は)(ログインを呼び出すとき:

export class ChildrenComponent { 
    login() { 
    user.name = 'Toto'; 
    } 
} 

ここで、userの値を親コンポーネントに送信します。

可能でしょうか?

ありがとうございます!

+2

https://angular.io/guide/component-interaction#parent-listens-for-child-イベント –

+0

イベントエミッター、サービス、これを行うためのいくつかの異なる方法:https://angular.io/guide/component-interaction#parent-listens-for-child-event –

+0

ルーターアウトレットを扱うときにイベントエミッターが機能しない可能性がありますが、あなたは今、特定の束縛を作る方法を持っています。 – Meir

答えて

0

角度の依存性注入を使用できます。

@Component() { 
    .... 
} 
export class Parent { 
    public user: User; 
    .... 
} 

@Component() { 
.... 
} 
export class Child { 
    constructor(public parent: Parent) { 
    } 

    someAction() { 
    this.parent.user = user; 
    } 
} 

親と子はあなたのコンポーネント名(例えば、MainContainerとLoginComponent)に置き換える必要があり、シンボリック名です。また、別の場所で使用するとコンポーネントが失敗しないように、親をオプションにすることを検討することもできます。

これは通常のネストでは機能しますが、アウトレットで動作することを確認する必要があります。

また、親メンバーを入力として価値の変更をレンダリングするようにすることも考えられます。

0

ユーザーが変更した親コンポーネントを放出するためにEventEmmiterを使用する必要があります。例えば、イベントでデータを送信することができます。

あなたの親コンポーネントテンプレート:

<your-child-component (selectedUser)="selectUser($event)"></your-child-component> 

あなたParentComponent

export class ParentComponent { 
    user: any; 

    selectUser(user) { 
    this.user= user; 
    } 
} 

あなたChildComponent

export class ChildComponent{ 
    user: any; 

    @Output() selectUser = new EventEmitter<any>(); 

    onSelectUser(user: any) { 
    this.selectUser.emit(user); 
    } 
} 

あなたが良い例を見つけることができますthere

0

ありがとうMeirあなたの解決策は良いです! 他の人にとっては良い解決策ですが、ルータコンセントを使用するとEventEmitterを使用して変数を送信することはできません

+0

Btw、おそらくサービス方法も良い方法でしょう。親子は動作しますが、それはタブなどのものには適していますが、ユーザーにはアプリケーション全体の価値があり、サービスはよりよく聞こえる – Meir

関連する問題