gpt4 book ai didi

angular - 函数: Angular 2内的函数

转载 作者:行者123 更新时间:2023-12-02 20:48:08 28 4
gpt4 key购买 nike

我在 Angular2 中使用这个函数(cordova 插件的一部分):

download()
{
//some download stuff

// ==> here this.percentage=50 works

//show progress of download
this.fileTransfer.onprogress = function(progressEvent) {
if (progressEvent.lengthComputable) {
console.log((progressEvent.loaded / progressEvent.total)); // works great
this.setpercentage((progressEvent.loaded/progressEvent.total)*100) // doesn't work
} else {}
}
}

setpercentage(perc)
{
this.percentage = perc;
}

但是百分比没有更新。它说 setpercentage() 不是一个函数。

我是 Angular 的新手,并且我读过有关箭头函数的内容。于是我尝试了一下,改成了:

this.fileTransfer.onprogress((progressEvent)=>{
if (progressEvent.lengthComputable) {
console.log((progressEvent.loaded / progressEvent.total));
this.setpercentage((progressEvent.loaded/progressEvent.total)*100)
} else {}
});

但这破坏了整个脚本。控制台日志不再显示百分比。

我做错了什么?

更新:我尝试了@echonax建议,但没有运气:

download()
{
this.setpercentage(50); <-- works

this.fileTransfer.download(**download stuff**);

var self = this; // store outer this in a variable
this.fileTransfer.onprogress = function(progressEvent) {
if (progressEvent.lengthComputable) {
console.log((progressEvent.loaded / progressEvent.total)); // works great
self.setpercentage(60); // <-- doesn't work
} else {}
}
}

setpercentage(perc)
{
this.percentage = perc;
}

最佳答案

改变

this.fileTransfer.onprogress = function(progressEvent) {

this.fileTransfer.onprogress = (progressEvent)=> {

您的this并未引用您的组件

这与做类似

var self = this; // store outer this in a variable
this.fileTransfer.onprogress = function(progressEvent) {
if (progressEvent.lengthComputable) {
console.log((progressEvent.loaded / progressEvent.total)); // works great
self.setpercentage(60, self) // <-- use it here
} else {}
}

setpercentage(perc, self)
{
setTimeout(()=>{
self.percentage = perc;
},0);
}

但使用第二种方法时,setpercentage 方法中的 this 将引用函数实例而不是组件

关于angular - 函数: Angular 2内的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43399592/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com