2017-04-16 6 views
0

私はAngular2の初心者です。アプリはシンプルです:NotesContianerComponentは、getNotes()addNote()メソッドを持つNoteServiceに接続しています。角度 - Angular2がサービスからのデータを自動的に更新する方法がわかりません

NotesContainerComponentでは、サービスから返されたデータをメンバmyNotesおよびngOnInitイベントに格納して、アレイをリフレッシュしています。私は現在そのコードのどこにでもその配列に触れていません。私は、フォームを使用して新しいメモを追加し、NotesContainerComponentからサービスのaddNote()メソッドを呼び出すとき

は今、ノートでは、バックエンドモックノートアレイに追加されますんが、同時に、UI(すなわちNotesContainerComponent)が更新されます自動的に新しいメモと一緒に!私は手動でそれをリフレッシュするために何もしていません。

調査のために、console.log()をサービスのgetNotesメソッドに追加しましたが、最初に呼び出されるのはngOnInitフックだけです。

私には分かりませんが、Angular2はサービスを自動的に照会することなく新しいメモをどのように知っていますか?そしてこれをやめる方法は?すべての手がかりをいただければ幸いです。参照用

NotesContainerComponentコード:

export class NotesContainerComponent implements OnInit { 
    constructor(
     private noteService: NoteService 
    ) { } 

    addNote(newNote):void { 
     this.noteService.add(newNote); 
    } 

    myNotes: Notes[]; 

    ngOnInit() { 
     this.noteService.getNotes() 
      .then(notes => this.myNotes = notes); 
    } 
} 

答えて

3

あなたはObjectArrayであなたのモックデータを格納しているとthis.myNotesの参照はそのObjectの参照である場合。あなたの模擬データの内容が変更されると、すべての参照も変更されます。これは、オブジェクトがjavascriptで可変であるためです。

+0

'myNotes'は、' getNotes() 'メソッドによってのみ更新できるコンポーネントのローカル配列を参照しています。正確には@aditya_m @ –

+0

です。これを 'add'メソッドで更新し、配列を変更します。 'this.myNotes'はこのローカル配列を参照するので、それも変更されます。 – echonax

+0

'add'メソッドはサービスに属し、コンポーネントのローカル配列ではなくサービスに存在するモック配列を更新します。 –

関連する問題