Ionic使用cordova-plugin-firebase时navCtrl导航报错求助
搞定Ionic+cordova-plugin-firebase手机号验证后的跳转问题
嘿,看你的错误日志和代码,核心问题其实很明确——回调函数里的this指向不对!在window.FirebasePlugin.verifyPhoneNumber的成功回调里,普通函数的this已经不是你的Ionic组件实例了,所以this.navCtrl自然找不到,才会报Cannot read property...的错。
先解决跳转失败的问题,给你三个靠谱的办法:
1. 用箭头函数(最推荐,代码最简洁)
箭头函数会“继承”外部的this,直接把回调改成箭头函数,就能正确访问组件的navCtrl了:
window.FirebasePlugin.verifyPhoneNumber(phoneNumber, 60, (credential) => { console.log(credential); const verificationId = credential.verificationId; this.navCtrl.push(AuthDeviceVerifyPage, { verificationid: verificationId }); });
2. 提前存好组件的this
在调用验证方法前,先把组件的this存到一个变量里(比如that),然后在回调里用这个变量代替this:
const that = this; window.FirebasePlugin.verifyPhoneNumber(phoneNumber, 60, function (credential) { console.log(credential); const verificationId = credential.verificationId; that.navCtrl.push(AuthDeviceVerifyPage, { verificationid: verificationId }); });
3. 用bind绑定上下文
给回调函数手动绑定组件的this,确保回调里的this指向正确:
window.FirebasePlugin.verifyPhoneNumber(phoneNumber, 60, function (credential) { console.log(credential); const verificationId = credential.verificationId; this.navCtrl.push(AuthDeviceVerifyPage, { verificationid: verificationId }); }.bind(this));
顺便说下你看到的超时日志
那个I/PhoneAuthProvider: Sms auto retrieval timed-out.是Firebase自动获取验证码超时的提示,和跳转失败没关系,但可能影响用户体验。你可以试试这些优化:
- 检查应用有没有获取短信的权限
- 把超时时间从60秒适当延长一点
- 加个手动输入验证码的入口,别让用户一直等自动检索
内容的提问来源于stack exchange,提问作者G B
相关产品推荐
相关产品推荐

