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,修复它。