Angularjs 子url中的离子和角度ui路由器导航问题
在我的Ionic应用程序中,特别是在Chrome中通过Ionic Service进行测试时,我看到在使用Ionic选项卡导航时出现了一种奇怪的行为。如果我将页面作为根路由()加载,导航和状态工作正常。我可以单击页面底部的任何选项卡(iOS视图),获得预期的行为 现在,如果我加载其中一个嵌套视图的URL,并单击选项卡返回父视图,则只显示我输入的子视图 示例(借用爱奥尼亚的夜间笔): 当在没有#/tab/facts2的情况下输入上述代码笔时,导航按预期进行-我可以单击“科学事实”按钮,向下导航几个孩子,然后单击“主页”图标并返回根目录 当在第二个URL输入时,正如我所料,我会直接进入facts2页面。然而,点击“主页”图标总是会让我回到facts2Angularjs 子url中的离子和角度ui路由器导航问题,angularjs,ionic-framework,angular-ui-router,Angularjs,Ionic Framework,Angular Ui Router,在我的Ionic应用程序中,特别是在Chrome中通过Ionic Service进行测试时,我看到在使用Ionic选项卡导航时出现了一种奇怪的行为。如果我将页面作为根路由()加载,导航和状态工作正常。我可以单击页面底部的任何选项卡(iOS视图),获得预期的行为 现在,如果我加载其中一个嵌套视图的URL,并单击选项卡返回父视图,则只显示我输入的子视图 示例(借用爱奥尼亚的夜间笔): 当在没有#/tab/facts2的情况下输入上述代码笔时,导航按预期进行-我可以单击“科学事实”按钮,向下导航几个
<ion-tab title="Home" icon="ion-home" href="#/tab/home">
<ion-nav-view name="home-tab"></ion-nav-view>
</ion-tab>
有趣的是,如果我使用facts2页面上的“主页”按钮,它确实可以正确导航到主页,但导航图标将不起作用
<a class="button icon ion-home" href="#/tab/home"> Home</a>
对于ui路由器/状态更改是如何工作的,是否有什么我不理解的地方,或者这是一个bug?我主要担心的是,当编译和部署此应用程序时,用户将程序保留在其中一个子状态,然后重新打开,导航栏将断开。
加载您对配置文件的stateprovider声明的视图。如果先加载次视图,它将不会创建正确的导航历史记录,并且您将无法返回到主选项卡视图。“名称”属性与您在上的名称相同:
views: {
'home-tab': {
templateUrl: "templates/home.html",
controller: 'HomeTabCtrl'
}
}
因此,如果要首先加载次视图,请添加:
$scope.$on('$ionicView.beforeEnter', function (event, viewData) {
$ionicHistory.clearCache();
});
在主选项卡视图控制器中,它将清除视图缓存并替换为右视图/html
另一种方法是使用所需状态的副本,该副本将作用于正在使用的当前视图,例如:
$stateProvider
.state('tabs', {
url: "/tab",
abstract: true,
templateUrl: "templates/tabs.html"
})
.state('tabs.home', {
url: "/home",
views: {
'home-tab': {
templateUrl: "templates/home.html",
controller: 'HomeTabCtrl'
}
}
})
.state('tabs.facts', {
url: "/facts",
views: {
'home-tab': {
templateUrl: "templates/facts.html"
}
}
})
.state('tabs.facts2', {
url: "/facts2",
views: {
'home-tab': {
templateUrl: "templates/facts2.html"
}
}
})
.state('tabs.about', {
url: "/about",
views: {
'about-tab': {
templateUrl: "templates/about.html"
}
}
})
.state('tabs.aboutFacts2', {
url: "/about/facts2",
views: {
'about-tab': {
templateUrl: "templates/facts2.html"
}
}
})
这不会解决你的问题,但也不会导致它。Facts2正在替换两个不同的视图,可以从两个不同的上下文访问,从而保持导航历史记录的严密性。
加载您在配置文件的stateprovider声明上的视图。如果先加载次视图,它将不会创建正确的导航历史记录,并且您将无法返回到主选项卡视图。“名称”属性与您在上的名称相同:
views: {
'home-tab': {
templateUrl: "templates/home.html",
controller: 'HomeTabCtrl'
}
}
因此,如果要首先加载次视图,请添加:
$scope.$on('$ionicView.beforeEnter', function (event, viewData) {
$ionicHistory.clearCache();
});
在主选项卡视图控制器中,它将清除视图缓存并替换为右视图/html
另一种方法是使用所需状态的副本,该副本将作用于正在使用的当前视图,例如:
$stateProvider
.state('tabs', {
url: "/tab",
abstract: true,
templateUrl: "templates/tabs.html"
})
.state('tabs.home', {
url: "/home",
views: {
'home-tab': {
templateUrl: "templates/home.html",
controller: 'HomeTabCtrl'
}
}
})
.state('tabs.facts', {
url: "/facts",
views: {
'home-tab': {
templateUrl: "templates/facts.html"
}
}
})
.state('tabs.facts2', {
url: "/facts2",
views: {
'home-tab': {
templateUrl: "templates/facts2.html"
}
}
})
.state('tabs.about', {
url: "/about",
views: {
'about-tab': {
templateUrl: "templates/about.html"
}
}
})
.state('tabs.aboutFacts2', {
url: "/about/facts2",
views: {
'about-tab': {
templateUrl: "templates/facts2.html"
}
}
})
这不会解决你的问题,但也不会导致它。Facts2正在替换两个不同的视图,并且可以从两个不同的上下文访问,从而保持导航历史的严密性