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

模块路线:

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”将被调用两次。 我在这里错过了什么?

我有同样的问题,似乎有一个愚蠢的错误与路由。 有一些redirect正在进行。

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

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

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

今天我面临同样的问题。 我已经在我的$ routeProvider和我的HTML中添加了控制器名称。

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

在我看来

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

您可以从您的视图或从您的routeprovider中删除控制器名称。

我有类似的问题。 我发现在路线中添加了一个斜线,但没有按照预期的方式工作。

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

有了这个标记

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

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

奇怪的是,相反似乎也在工作,在链接中的尾部斜线,而不是在路线。 似乎只要尾部的斜杠匹配的决议和控制器将不会被调用两次!

我的情况是有2 ng-view的指令。 我试图包装它,但无意中重复了它:

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

去掉包装,固定它。

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

我有同样的问题,发现如果你两次引导你的angular度,你可以有同样的错误。

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

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

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

  .state('chat', { url: '/', views: { 'content@': { templateUrl: 'views/chat_wv1.html', controller: 'ChatController' }, 'form@': { templateUrl: 'views/chat_wv_placeholder.html', controller: 'ViewController' }, 'sidePanel@': { templateUrl: 'views/sidePanel_wv.html' /* removing this part solved my issue*/ /*controller: 'ChatController'*/ } } }) 

希望这可以帮助别人。

我也有一个类似的问题与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标签来解决这个问题

因为你有多个ui-view

一个控制器可以被添加到DOM的多个元素,所以如果已经完成了这个问题,例如:

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

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

enter code here删除了重复的,即ng-view,修复它。