2017-12-20 29 views
0

角度4で角度の異なるコントローラからのデータをバインドする

私は、さまざまなタスクを持つメニューコンポーネントであるnavbarを持っています。このタスクはWebサービスから発生します。

これらのタスクの1つをメニューからクリックすると、編集タスクコンポーネントがフォームとともに呼び出されます。

編集タスクのフォームのデータは、編集タスクのコンポーネントの一部のフィールドにバインドされているため、フォーム内の何かを変更すると、フォームのヘッダーに反映されます。

ただし、メニューコンポーネントのデータは変更されません。 メニューコンポーネントのデータを更新/バインドするにはどうすればよいですか?私はページを更新したくありません。たぶんソリューションはgetTasks()関数を呼び出しているが、それはここで私は、タスクのリストを呼び出しedittaskコンポーネント

menu.component.tsで行う必要があります。

ngOnInit() { 
    this.getTasks(); 
} 

getTasks(): void { 
    this.taskService.getTasks() 
     .subscribe(Tasks => this.tasks = Tasks); 
} 

をmenu.component.htmlここで私は、タスクリストを呼び出します。

<li *ngFor="let task of tasks" class="d-inline-block col-md-12"> 
    <a routerLink="/task/{{task.id}}" > {{task.title}}</a> 
    <!-- <span class="close big"></span> --> 
    <button class="close big" title="delete task" (click)="delete(task)">x</button> 
</li> 

編集タスクからフォームを充填した後、私はONS関数を呼び出します

this.taskService.updateTask(task, id) 
     .subscribe(
     // i need to refresh the getTask that is in the menu. 
     // or do something for update the menu task 
     ); 
+0

ねえ、答えのいずれかは、あなたを助けたのですか? :) – Alex

+0

@ AJT_82いいえ、私は質問[ここ](https://stackoverflow.com/questions/47913150/how-to-detect-change-from-one-component-into-other)に再度質問し、見つけました答え: – ValRob

答えて

0

メニューコンポーネントに検出変更を追加する場合は、ubmit()を使用します。あなたはとてもメニューコンポーネントでは、データを再フェッチするメニューコンポーネントを伝えるために対象を使用することができ

private cdRef: ChangeDetectorRef 
+0

私はそれをしましたが、何も起こりません。 @LéoRoueire – ValRob

1

ngAfterViewChecked() { 

    this.cdRef.detectChanges(); 

}  

およびインポート:

import { Component, OnInit, ChangeDetectorRef } from '@angular/core'; 

とコンストラクタのparamにこれを追加件名を宣言して聞いてください。next

import { Subject } from 'rxjs/Subject'; 

// ... 

public static updateTasks: Subject<boolean> = new Subject(); 

constructor(...) { 
    MenuComponent.updateTasks 
    .subscribe(res => { 
     this.getTasks(); 
    }) 
} 

、その後、あなただけのgetTasksを実行するためのメニューコンポーネントを伝えるために被写体にnextを呼び出して、タスクを編集コンポーネントで:

import { MenuComponent } from '....' 

// ... 

this.taskService.updateTask(task, id) 
    .subscribe(() => MenuComponent.updateTasks.next(true)); 
関連する問題