2017-04-16 3 views
0

저는 Angular2 초보자이며 테스트 노트 작성 앱을 만듭니다. 앱은 간단합니다 : NotesContianerComponentgetNotes()addNote() 방법을 사용하는 NoteService에 연결됩니다.각도 - Angular2가 서비스에서 자동으로 데이터를 업데이트하는 방식을 볼 수 없습니다.

NotesContainerComponent에서 서비스에서 반환 된 데이터를 구성원 myNotesngOnInit 이벤트에 저장하고 배열을 새로 고칩니다. 나는 현재 그 코드에서 배열을 만지지 않을 것이다. 내가 양식을 사용하여 새 메모를 추가하고 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

당신이 Object 또는 Array에서 모의 ​​데이터를 저장하고 this.myNotes의 참조가 Object의 참조 경우. 모의 데이터 내용이 변경되면 모든 참조가 변경됩니다. 개체 자바 스크립트에서 변경할 수 있기 때문입니다.

+0

'myNotes'는 getNotes() 메소드를 통해서만 업데이트 될 수있는 구성 요소의 로컬 배열을 참조합니다. 그래서 그렇게 할 수 없습니까? –

+0

@aditya_m 정확히 그 경우입니다. 'add' 메쏘드로 그것을 업데이트하면 배열이 바뀝니다. 'this.myNotes'는이 로컬 배열을 참조하기 때문에 또한 변경됩니다. – echonax

+0

'add' 메쏘드는 서비스에 속해 있으며, 구성 요소의 로컬 배열이 아닌 서비스에있는 모의 배열을 업데이트합니다. –

관련 문제