Javascript Angular2:在回调函数中调用其他函数
我正在构建Angular2应用程序。 我在Javascript Angular2:在回调函数中调用其他函数,javascript,asynchronous,angular,asynccallback,Javascript,Asynchronous,Angular,Asynccallback,我正在构建Angular2应用程序。 我在myService中有一个异步函数deleteObject。它回报了一个承诺。我在组件中有另一个名为refresh的函数,用于刷新页面。我如何从承诺内部调用刷新。这就是我所尝试的: export class AppComponent{ refresh(){ // refresh page here } delete(){ this.myService.deleteObject(params).t
myService
中有一个异步函数deleteObject
。它回报了一个承诺。我在组件中有另一个名为refresh
的函数,用于刷新页面。我如何从承诺内部调用刷新。这就是我所尝试的:
export class AppComponent{
refresh(){
// refresh page here
}
delete(){
this.myService.deleteObject(params).then(
function(data){
//this.refresh() doesn't work here.
});
}
}
这是一个背景问题。“this”指回调函数的上下文,可以是承诺或其他内容。您实际上想要的是对组件上下文的引用,您可以这样实现
delete(){
var componentRef = this; // colloquially "that" or "self"
this.myService.deleteObject(params).then(
function(data){
componentRef.refresh() // does work here.
});
}
如果您使用的是Typescript,则可以使用。它们保留了您期望的
上下文。因此,替换
delete(){
this.myService.deleteObject(params).then(
function(data){
//this.refresh() doesn't work here.
});
}
为此:
delete(){
this.myService.deleteObject(params).then(
(data)=>{
//this.refresh() should work here
}
);
}
另外,fwiw,您可以查看哪个是一个强大的角度范例(从技术上讲是rxjs范例,但他们合并了它),谢谢@kirinthos。我是Javascript新手。这对我很有效。:)@安德伍德,我建议你给我一个readThank@kirinthos。我来看看。谢谢帕特里克。我认为这是正确的答案,当涉及到打字脚本时