2013-03-29 49 views
3

一个类似的问题被要求here但它没有帮助我。angularjs控制器执行两次

我正在学习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'); 
} 

回答

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'); 
} 
+0

谢谢Gloopy我也是新来拨弄。 。 – user2223142

24

一个可能的来源是这样的:如果你正在使用路由和指定路线控制器 - 你不能在该路由使用模板指定。当我们忽略这个问题时,我们遇到了这个问题

+1

很大的呼喊,这正是我的问题 – iancrowther

+0

你的意思是不要在模板HTML中添加'ng-controller ='我有同样的问题 –

+0

好吧,看起来像是问题... –

1

我有一个类似的问题,这是由于我的路由斜线。

我有类似于/ post {slug:[a-z0-9 - ] * /}的路线,并且在domain.com/post上访问该页面时,它会重定向到带有斜线的版本。

花了我好几个工作吧!

编辑: 其实,只是更仔细地看看你的代码,并注意到那里没有路由,所以这可能不是你的情况的原因。

对于像我这样寻找不同解决方案的人可能会有用。

+0

你是如何解决这个问题的? –

0

对于所有使用轨道和angularjs人:

Rails框架是URL映射到的意见并加载它们甚至当你有一个单一的视图应用的angularjs $路线相撞。

为了防止控制器的双载: 去的application.js和删除“// =需要turbolinks

不客气