我正在使用FCM PLugin Ionic 2
在我的应用组件
下面 constructor(public menu1: MenuController,public alertCtrl:AlertController,public platform: Platform,public authservice:Authservice) {
this.initializeApp();
}
initializeApp() {
this.platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
StatusBar.styleDefault();
Splashscreen.hide();
//Push Notifications
if(typeof(FCMPlugin) !== "undefined")
{
FCMPlugin.getToken(function(t){
console.log("Use this token for sending device specific messages\nToken: " + t);
}, function(e){
console.log("Uh-Oh!\n"+e);
});
FCMPlugin.onNotification(function(d){
if(d.wasTapped){
console.log(d);
var nav:NavController = this.app.getComponent("nav");
this.nav = nav;
nav.setRoot(MycomplaintsPage);
} else {
console.log("Push Notification", d);
console.log("you have new notifications");
}
}, function(msg){
}, function(err){
console.log("Arf, no good mate... " + err);
});
}
}
它的工作非常完美。但是点击通知页面无法重定向。
我收到此错误
未捕获的TypeError:无法读取属性' getComponent'未定义的。
如何解决此问题。
请告诉我, 感谢
答案 0 :(得分:0)
如果使用常规函数,this
对象会发生更改,即它属于函数而非类,因此this.app
也未定义。 Arrow functions ()=>{}
未定义this
,而使用外this
。
使用箭头函数进行回调
FCMPlugin.onNotification((d)=>{
if(d.wasTapped){
console.log(d);
var nav:NavController = this.app.getComponent("nav");
this.nav = nav;
nav.setRoot(MycomplaintsPage);
//...
});
或者在通话前设置self=this
并使用self
。
let self = this.//declare here
FCMPlugin.onNotification(function(d){
if(d.wasTapped){
console.log(d);
var nav:NavController = self.app.getComponent("nav");//use here
this.nav = nav;
nav.setRoot(MycomplaintsPage);
//...
});