类型错误:无法读取 Ionic 2 中未定义的属性"viewCtrl"



我在提供程序中有一个从特定页面调用的Observable.timer。我还向提供程序 Observable 传递了一个函数,当它完成倒计时时,它将调用位于初始页面中的函数。但是计时器结束后出现错误:

注意 :我已经在页面内导入了视图控制器,但没有导入提供程序(如果我尝试在提供程序内部导入视图控制器,则会出现另一个错误(

错误

取消订阅期间发生 1 个错误:↵ 1( 类型错误:无法读取 属性 'viewCtrl' 的未定义

newTimer() {
this.countDown = this.timerProvider.newTimer(this.endTimer); //pass function below
}
endTimer() {
const indexModal = self.viewCtrl.index;
// then we remove it from the navigation stack
//this.navCtrl.remove(2);
self.navCtrl.push(WinnersPage, {
gameId: self.gameId
}).then(() => {
});
console.log('timer ENDED');
}

供应商

countDown: any;
counter = 1*100;
tick = 1000;
constructor(public http: HttpClient) {
//console.log('Hello TimerProvider Provider');
}
newTimer(endTimer) {
return Observable.timer(0, this.tick)
.take(this.counter).map(() => --this.counter)
.finally(() => endTimer());
}

你可以使用简单,

newTimer() {
this.countDown = this.timerProvider.newTimer(this.endTimer.bind(this)); 
}

或:

由于您正在从another function调用function,因此this的引用在endTimerfunciton

因此,将componentthis分配给global variable self并在endTimer function内使用它

试试这个,

let self = this;
newTimer() {
this.countDown = this.timerProvider.newTimer(this.endTimer); //pass function below
}
endTimer() {
const indexModal = self.viewCtrl.index;
if(self.answerModal) {
self.answerModal.dismiss();
}
if(self.hintModal) {
self.hintModal.dismiss();
}
self.navCtrl.push(WinnersPage, {
gameId: self.gameId
}).then(() => {
});
self.storage.set('firstAnswerCreated', '');
self.playaudio.pause();
console.log('timer ENDED');
}

相关内容

  • 没有找到相关文章

最新更新