AngularJs:使用$ routeProvider调用控制器两次

时间:2013-01-21 16:25:58

标签: controller angularjs

模块路线:

var switchModule = angular.module('switchModule', []);

switchModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
    when('/build-content', {templateUrl: 'build-content.html', controller: BuildInfoController});
}]);

控制器:

function BuildInfoController($http, $scope){
    alert("hello");
}

HTML:

<html ng-app="switchModule">
...
<body>
    <ul>
        <li><a href="#build-content"/></a></li>
    </ul>
    <div class="ng-view"></div>
</body>
...

每次单击超链接''时,'BuildInfoController'将被调用两次。我在这里错过了什么吗?

11 个答案:

答案 0 :(得分:70)

今天我遇到了同样的问题。我在$ routeProvider中添加了控制器名称,也在我的html中添加了控制器名称。

$routeProvider
    .when('/login', {
            controller: 'LoginController',
            templateUrl: 'html/views/log-in.html'
     })

在我看来是

<div class="personalDetails" ng-controller="LoginController"> </div>

您可以从视图或路线提供商处删除控制器名称。

答案 1 :(得分:43)

我遇到了同样的问题,似乎路由有一个愚蠢的错误。正在进行某种重定向。

修复它,我只是在href中添加了一个斜杠,如:

<li><a href="#/build-content/"></a></li>

我希望它能为你解决问题。

答案 2 :(得分:15)

我遇到了类似的问题。我发现在路线中添加了一个尾部斜线,但链接中没有按预期工作。

$routeProvider.
when('/build-content/',...);

使用此标记

<li><a href="/build-content">Content</a></li>

然后AngularJS会将浏览器中的URL更正为$ routeProvider中定义的内容。

奇怪的是,相反的情况似乎也适用于链接中的尾部斜杠,而不是路径中的斜杠。只要尾随斜杠匹配解析,控制器就不会被调用两次!

答案 3 :(得分:8)

Mine是一个拥有2 ng-view指令的案例。我试图把它包起来,但无意中重复了它:

<div class="ng-view">
    <div ng-view></div>
</div>

移除包装,修复它。

答案 4 :(得分:8)

如果存在,请从模板页面中删除ng-controller指令。

答案 5 :(得分:1)

我遇到了同样的问题,发现如果你有两次角度训练,你会有同样的错误。

在我的情况下,我有<body ng-app>angular.bootstrap(document,['app']),这导致了控制器的双重初始化。

希望这可以节省一些时间。

答案 6 :(得分:0)

我在单个状态下为每个视图部分声明了SomeController。 这导致了重复事件的发生。

<section id="passgen">
<button type="button" id="pass-button" onclick="generatePassword(16)">Generate Password</button>
<br><br>
<input id='password' type="text" name="output">
</section>

希望这有助于其他人。

答案 7 :(得分:0)

我也遇到了类似问题的customDirective,并且单位重复了我的控制器。

<html>
   <body ng-app="MyApp" ng-controller="MyDirectiveCtrl">
      <my-directive></my-directive>
   </body>
</html>

angular.directive('myDirectivie', [function() {
   return {
         restrict: 'E',
         controller: 'MyDirectiveCtrl',

         ...

   }
}]);

我通过删除身体级别的ng-controller标签解决了这个问题

答案 8 :(得分:0)

因为你有多个ui-view

答案 9 :(得分:0)

可以将控制器添加到DOM的多个元素中,因此如果已经完成此操作,则会出现此问题。 :

  <div id="myDiv1" ng-controller="myController" ....></div>
  ....
  <div id="myDiv2" ng-controller="myController" ....></div>

答案 10 :(得分:-1)

同样在这里 我是一个有2 ng-view指令的案例。

     enter code here 删除了副本,即ng-view,修复了它。