簡體   English   中英

承諾,Angular2和范圍

[英]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而是說itemthis.todo是不確定的。 錯誤似乎在new TodoItem() ,未定義item

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM