2017-06-22 30 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脚本的标准。 –

相关问题