2017-06-22 72 views
-1

所以我在我的應用中使用了uikit confirmation modal。我的問題是,當我要點擊<button>進行確認時。 this裏面的函數是undefined。這裏是我的代碼...'this'在函數()中是未定義的。 angular 2

declare var UIkit:any; 

deleteData(dataArr): void { 

    UIkit.modal.confirm('Are you sure you want to delete this?', function() { 
     console.log(dataArr); 
     console.log(this); 
     //use service here... 
     UIkit.modal.alert('Confirmed!'); 
    }); 
} 

內部的功能,我希望爲HTTP請求使用服務,但我有在this一個問題。我正在使用Angular 2.x.

+1

'()=> {'... ... –

+0

[setTimeout和JavaScript中的this this]可能重複(https://stackoverflow.com/questions/591269/settimeout-and-this- in-javascript)| https://stackoverflow.com/questions/34930771/why-is-this-undefined-inside-class-method-when-using-promises –

回答

1

使用箭頭功能...

declare var UIkit:any; 

deleteData(dataArr): void { 

    UIkit.modal.confirm('Are you sure you want to delete this?',() => { 

    console.log(this); 
    // [...] 
    }); 
} 

退房MDN: Arrow functions對此事的細節。

箭頭功能不會創建自己的這一背景下,所以this已經從封閉的上下文 了原有的意義。

+0

哇。這很容易。我想我會去使用綁定。無論如何謝謝你。它現在工作 –

0

'這個' 不傳遞給你的函數範圍,嘗試

declare var UIkit:any; 

deleteData(dataArr): void { 
var that = this; 
UIkit.modal.confirm('Are you sure you want to delete this?', function(){ 
    console.log(dataArr); 
    console.log(that); 
    //use service here... 
    UIkit.modal.alert('Confirmed!'); 
}); 
} 
+0

謝謝。這工作。但即時通訊將使用()=> {我認爲這是ecma腳本的標準。 –