[英]Promises, Angular2 and scope
我有一個Angular2組件,需要從外部服務獲取ID。 該服務返回一個承諾,因此我需要等待Promise才能取回數據,然后再繼續。 該組件看起來像這樣:
export class AddTodoComponent implements OnInit {
public todo:TodoItem;
constructor(private todoService: TodoService,
private router: Router) {
this.todo = new TodoItem();
}
saveItem(){
this.todoService.getItems().then(t=>{
this.todo.item.id = t.length;
this.todoService.addItem(this.todo);
});
}
}
但是,當執行saveItem函數時,在控制台中出現如下錯誤:
例外:錯誤:未捕獲(承諾中):TypeError:無法設置未定義的屬性“ id”
該服務僅返回帶有我需要的項目的Promise.resolve(data)
,並且我已驗證它是否按預期返回了數據。 但是,現在看來,在promise的“ thennable ”內,我無法再訪問this.todo
,這是因為這現在是指this.todo
而不是類。
解決此問題的正確/首選方法是什么?
因為todo
是項目
this.todo = new TodoItem();
this.todo.item
( TodoItem
實例的屬性item
) ...是未定義的。 因此,應該先初始化(無論如何,在構造函數內部,或如下所示的外部)
this.todo.item= this.todo.item || {} ; // just init item
this.todo.item.id = t.length;
問題不在於this
的值-由於使用了“胖箭頭”功能( =>
),它仍然引用AddTodoComponent
類實例。
相反,問題似乎是沒有this.todo
item
屬性,因此您不能再設置this.todo.item.id
該錯誤並不表示this
不指向當前實例AddTodoComponent
而是說item
的this.todo
是不確定的。 錯誤似乎在new TodoItem()
,未定義item
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.