类似的问题被问到here,但它对我没有帮助。
我正在学习angularjs,我注意到控制器被执行了两次。
我有一个非常简单的小提示示例,显示行为here
我在学习服务的过程中构建了这个示例,起初我认为这是将服务注入控制器,但我评论了与服务相关的所有代码,并且控制器仍然执行了两次。
我的例子有效,但我担心我做错了什么。
<div ng-app="MyApp">
<div ng-controller="MyCtrl">
{{data1}}
</div>
</div>
var app = angular.module('MyApp', [])
app.service('Service1', function(){
return {
ajxResponse1: 'dataFromService1'
};
});
function MyCtrl($scope, Service1){
alert('Entering MyCtrl');
$scope.data1 = Service1.ajxResponse1;
alert('Exiting MyCtrl');
}
答案 0 :(得分:25)
一个可能的来源是:如果您使用路由并在路由中指定控制器 - 您不能在路由使用的模板中指定它。当忽略这个问题时,我们遇到了这个问题。
答案 1 :(得分:4)
您的控制器在小提琴中运行了两次,因为角度被引用两次(一次通过框架和扩展下拉,另一次作为外部资源)。
请参阅此updated fiddle,其中我删除了外部资源,警报只显示一次。
代码保持不变:
function MyCtrl($scope, Service1, Service2, Service3){
alert('Entering MyCtrl');
$scope.data1 = Service1.ajxResponse1;
$scope.data2 = Service2.ajxResponse2;
$scope.data3 = Service3.ajxResponse3;
alert('Exiting MyCtrl');
}
答案 2 :(得分:1)
我有类似的问题,这是由于我的路由中的斜线。
我的路线上有/ post {slug:[a-z0-9 - ] * /},当访问domain.com/post页面时,它会重定向到末尾有斜杠的版本。
花了我很多时间来解决它!
编辑: 实际上,只是更详细地看一下你的代码并注意到那里没有路由,所以这可能不是你的情况。
对于像我这样寻找不同解决方案的人来说,可能会有用。
答案 3 :(得分:0)
对于所有使用rails和angularjs的人:
将URLS映射到视图并使用angularjs $ route加载它们的rails框架,即使您有单视图应用程序也是如此。
为防止控制器重载: 转到application.js并删除“// = require turbolinks
欢迎你。