2017-03-28 15 views
0

親コンポーネントのオブジェクトを別のコンポーネントの入力として使用する必要があるコンポーネントがあります。その文があったようとして混乱、ここに私のコードです:と呼ばれる私の親コンポーネントで角2 - 別のコンポーネントの入力で使用する必要があるコンポーネントから値を出力

project.component.ts、ここに私の関連する機能は以下のとおりです。project.component.html

/** 
    * Set the account to edit 
    */ 
    public accountToEdit: any = {}; 
    setAccountToEdit(account) { 
    this.accountToEdit = account; 
    } 

:のための今

<app-project-accounts 
     [projectId]="projectId" 
     (accountToEdit)="setAccountToEdit($event)" 
     (openCreateAccountModal)="openCreateAccount()"></app-project-accounts> 


<!-- New Project Account modal --> 
<project-account-create-edit 
    [projectId]="projectId" 
    [accountToEdit]="accountToEdit" 
    (toggleVisibility)="toggleProjectAccountModalVisibility($event)" 
    [visible]="projectAccountVisible"> 
></project-account-create-edit> 

project-accounts.component.tsファイルをクリックすると、この機能がトリガーされます。

/** 
    * Open the modal for updating an account 
    */ 
    openEdit(account) { 
    this.openCreateAccountModal.emit(true); 
    this.accountToEdit.emit(account); 
    } 

問題:モーダル(project-account-create-edit)が開くと、モーダルが閉じられるまで、this.accountToEdit入力が渡されないように見えます。

これは、入力が変更されるたびに、閉じた状態にあるときにのみモーダルを更新するということでしょうか?

私がする必要があるのは、コンポーネントproject-account-create-editの入力内にproject.component.tsの変数が入ることだけです。

私はここで間違っていますか?

ありがとうございます!

+0

「openCreateAccount() ''は何をしますか? –

+0

これは基本的に、変数をtrueに設定して、モーダルが開くようにします:openCreateAccount(){ this.projectAccountVisible = true; } –

+0

'' project-account-create-edit''で '' visible''プロパティをtrueに設定すると、 '' toggleVisibility''出力がトリガされますか? '' toggleProjectAccountModalVisibility($ event) ''は何をしますか? –

答えて

0

だから私は周りの人が忙しかったので、コンポーネントを変更するためにngOnChanges()を使用する必要がありました。私はこのコードを追加しました:

ngOnChanges(changes) { 

    if(changes.accountToEdit) { 
     this.accountToEditChanged = changes.accountToEdit.currentValue; 

     console.log('this.account', this.accountToEditChanged); 
     if(this.accountToEditChanged.hasOwnProperty('name')) { 
     this.isEditing = true; 
     this.createAccountForm.controls['name'].setValue(this.accountToEditChanged.name); 
     this.createAccountForm.controls['coding'].setValue(this.accountToEditChanged.coding); 
     } else { 
     this.accountToEditChanged = {}; 
     this.isEditing = false; 
     } 

    } 
} 

乾杯!

関連する問題