我是Ionic2的新手,我正在尝试根据当前菜单选择构建动态标签。我只是想知道如何使用导航控制器获取当前页面。
...
export class TabsPage {
constructor(navParams: NavParams,navCtrl:NavController) {
//here I want to get current page
}
}
...
从api文档我觉得getActiveChildNav()
或getActive()
会给我当前页面,但我不了解ViewController
/ Nav
。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:34)
完整示例:
import { NavController } from 'ionic-angular';
export class Page {
constructor(public navCtrl:NavController) {
}
(...)
getActivePage(): string {
return this.navCtrl.getActive().name;
}
}
获取当前页面名称的方法:
this.navCtrl.getActive().name
更多详情here
答案 1 :(得分:6)
OMG!这个真正帮助的伴侣,谢谢! @Deivide 我被困了一个月,你的回答救了我。 :) 谢谢!
if(navCtrl.getActive().component === DashboardPage){
this.showAlert();
}
else
{
this.navCtrl.pop();
}
答案 2 :(得分:2)
我的团队必须构建一个单独的自定义共享菜单栏,该菜单栏将与大多数页面共享和显示。从此菜单component.ts内部调用this.navCtrl.getActive().name
返回上一页的名称。在这种情况下,我们可以使用以下方式获取当前页面名称:
ngAfterViewInit() {
let currentPage = this.app.getActiveNav().getViews()[0].name;
console.log('current page is: ', currentPage);
}
答案 3 :(得分:0)
this.navCtrl.getActive().name != TheComponent.name
要么
this.navCtrl.getActive().component !== TheComponent
也是可能的
答案 4 :(得分:0)
navCtrl.getActive()似乎是buggy in certain circumstances,因为如果刚刚使用.setRoot或者刚刚使用了.pop,它会返回错误的ViewController,而navCtrl.getActive()似乎返回正确的ViewController,如果.push被使用了。
使用viewDidEnter Observable发出的viewController而不是使用navCtrl.getActive()来获取正确的活动ViewController,如下所示:
navCtrl.viewDidEnter.subscribe(item=> {
const viewController = item as ViewController;
const n = viewController.name;
console.log('active page: ' + n);
});
我在viewDidEnter订阅中测试了这个,不了解其他生命周期事件..
答案 5 :(得分:0)
旧帖子。但这就是我在dev和prod中都获得当前页面名称的方式
this.appCtrl.getActiveNav().getActive().id
答案 6 :(得分:0)
代替
paragraph.InnerText = "Your variable containing the text";
使用此
...
...
//In debug mode alert value is 'HomePage'
//In production/ signed apk alert value is 'n'
alert(activeView.component.name);
if (activeView.component.name === 'HomePage') {
...
...
答案 7 :(得分:-1)
您可以使用getActive
来激活ViewController
。 ViewController
有component
及其当前视图的实例。问题是比较方法。我已经找到解决方案,为我的所有页面组件设置了一些字段id:string
,然后比较它们。不幸的是,简单的检查函数名称会导致getActive().component.name
在缩小后中断。