AngularJS函数在路由更改时被错误地调用

时间:2015-12-23 16:25:01

标签: javascript angularjs twitter-bootstrap

我有一个使用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。

如果您需要更多信息,请告诉我,我尝试将相关内容包括在内,而不会花费太长时间。

2 个答案:

答案 0 :(得分:1)

您想要使用

ng-click="changeTab(0)"

而不是

select="changeTab(0)"

后者可能在编译阶段调用该函数。

修改

如果您使用的是AngularUI,则语法正确,但指令应为

<uib-tabset>

<uib-tab>

答案 1 :(得分:1)

它不应该发生。您可以在changeTab中设置断点,并使用参数1

查找调用此方法的人员