Ionic2:不能在服务中使用NavController。
我还是个学习者。不仅在Ionic中,也在Angular中。Ionic2:不能在服务中使用NavController。
我已经写了一些页面,并希望为每个页面添加页脚,用户可以通过所有主页进行切换。在写完第二页之后,我发现为此提供服务会很好,因为我再次使用了相同的方法。
这里是我的服务看起来像现在:
export class Navigation {
public navCtrl: NavController;
onLoadHome(){
this.navCtrl.push(HomePage);
}
}
当我现在请Navigator.onLoadHome()在一个HTML模板,我得到了以下错误: 无法读取属性的“推动”未定义。
所以我知道我的应用程序找到服务,并找到方法。但我的navCtrl是未定义的。我尝试了另外一种方法:
export class Navigation {
constructor(private navCtrl: NavController){}
onLoadHome(){
this.navCtrl.push(HomePage);
}
}
现在我又收到一条错误消息:无法解析导航的所有参数。
我真的不知道该怎么做才能完成这项工作。我希望你能帮助我。
(顺便说一句,我已经缩短该类一点。但是其他的方法,像onLoadHome一样,只为其他页面。)
这不是页面之间进行导航的好办法,但我希望这威力帮助你
在要使用本服务的页面,你得导入服务,然后将其设置这样
public mNavigation: Navigation;
constructor(public navCtrl: NavController, public navParams: NavParams) {
this.mNavigation = new Navigation(navCtrl)
}
当你要浏览,只需调用this.mNavigation.onLoadHome();
更好的方法是,您应该在您的服务中使用App
的Nav
而不是NavCtrl
。它看起来像这样
import { App } from 'ionic-angular';
@Injectable()
export class NavigationProvider {
constructor(public app: App) {
}
onLoadHome(){
this.app.getActiveNav().push(HomePage);
}
}
那么你的页面会是这样
constructor(public navCtrl: NavController,
public mNavigationProvider: NavigationProvider,
public navParams: NavParams) {
}
onNavigate() {
this.mNavigationProvider.onLoadHome();
}
我试过这一个,但我仍然得到一个运行时错误:'无法解析导航的所有参数'。顺便说一句,为什么它不是一个很好的方式来浏览页面? –
“从服务中改变视图是不好的做法(中断的MVC),但是,您可以将事件从服务发送到主控制器,并且控制器可以使用NavController(最佳方式),或者可以将NavController发送到您的服务一个属性(不坏的方式......),或者你可能需要创建一个组件,而不是使用该服务。“ 我刚刚添加另一种方式,你应该尝试 –
首先你的第二个例子完美地工作!谢谢你。 :) 给你的建议。这意味着我应该编写一个导航组件。在这一个,我应该写下所有的方法,然后我可以使用这个组件作为每个页面的新页脚。我对你有正确的理解吗? –
发布'NavController' –
['NavController'](https://ionicframework.com/docs/api/navigation/ NavController /)只能在页面/组件中注入。在服务中操作导航堆栈通常不是一个好主意 –
您可以像这样的'onLoadHome(navCtrl:NavController)''将'NavController'对象传递给'onLoadHome()'函数。 – hrdkisback