模块路线:
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'将被调用两次。我在这里错过了什么吗?
答案 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,修复了它。