我有一个使用AngularJS和bootstrap的应用程序,这导致我一些问题。主导航通过标签和路由完成,配置如下:
app.config(function($routeProvider) {
$routeProvider.when("/", {
templateUrl: "index.html",
controller: "controllerIndex"
}).when("/pageone", {
templateUrl: "pageone.html",
controller: "controllerPageOne"
}).when("/pagetwo", {
templateUrl: "pagetwo.html",
controller: "controllerPageTwo"
});
return $routeProvider.otherwise({
templateUrl: "error.html"
});
});
在我的pagetwo标签中,我还有两个标签:
<tabset>
<tab heading="Metrics" active="tabs[0]" select="changeTab(0)">
<tab heading="Admin LDAP Search" active="tabs[1]" select="changeTab(1)">
</tabset>
正如您可能已经知道的那样,我一直在使用函数changeTab和“active”属性来尝试让应用程序记住在此页面上选择了哪个选项卡,即使路径发生了变化。在controllerPageTwo中,相关代码是:
$scope.getCurrentTab = tabTracker.getCurrentTab()
$scope.tabs = tabTracker.getTabs()
$scope.changeTab = (tab) ->
tabTracker.setCurrentTab(tab)
这个想法是当路由更改为/ pagetwo时,将从服务tabTracker中提取当前(活动)选项卡和选项卡数组。然后,通过将正确的数组值设置为true,将另一个设置为false,将选项卡更改为该选项卡。这可以按预期工作,并在我按预期更改选项卡时调用。
但是,只要路由更改FROM / pagetwo,就会调用changeTab,值为1.这意味着无论如何,当路由更改时,第二个选项卡将成为返回此页面时的活动选项卡。 / p>
为什么要使用此最大值调用? (我正在搞乱三个标签,并且遇到了同样的问题,但它会将其称为值2)。我知道有时代码在控制器中运行了两次,但除了我的index.html之外,我没有任何地方引用ng-controller。
如果您需要更多信息,请告诉我,我尝试将相关内容包括在内,而不会花费太长时间。
答案 0 :(得分:1)
您想要使用
ng-click="changeTab(0)"
而不是
select="changeTab(0)"
后者可能在编译阶段调用该函数。
修改强>
如果您使用的是AngularUI,则语法正确,但指令应为
<uib-tabset>
和
<uib-tab>
答案 1 :(得分:1)