4

这里问了一个类似的问题,但对我没有帮助。

我正在学习 angularjs,我注意到控制器执行了两次。

我有一个非常简单的小提琴示例,显示了此处的行为

我在学习服务时构建了这个示例,起初我认为这是将服务注入控制器,但我注释了所有与服务相关的代码,但控制器仍然执行了两次。

我的例子有效,但我担心我做错了什么。

<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

4 回答 4

25

一个可能的来源是:如果您使用路由并在路由中指定控制器 - 您不得在路由使用的模板中指定它。当我们忽略了这一点时,我们遇到了这个问题。

于 2013-11-05T15:07:32.227 回答
4

您的控制器在小提琴中运行了两次,因为 angular 被引用了两次(一次通过Frameworks & Extensions下拉,另一个作为External Resource)。

请参阅此更新的小提琴,其中我删除了外部资源并且警报仅显示一次。

代码保持不变:

function MyCtrl($scope, Service1, Service2, Service3){
    alert('Entering MyCtrl');
    $scope.data1 = Service1.ajxResponse1;
    $scope.data2 = Service2.ajxResponse2;
    $scope.data3 = Service3.ajxResponse3;
    alert('Exiting MyCtrl');
}
于 2013-03-29T04:43:02.493 回答
1

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

我的路线有类似 /post{slug:[a-z0-9-]*/} 的内容,当访问 domain.com/post 上的页面时,它会重定向到末尾带有斜杠的版本。

我花了很长时间才解决它!

编辑:实际上,只是更详细地查看了您的代码并注意到那里没有路由,所以这可能不是您的情况的原因。

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

于 2013-12-08T11:25:00.663 回答
0

对于所有使用 rails 和 angularjs 的人:

将 URLS 映射到视图并加载它们的 rails 框架与 angularjs $route 冲突,即使您拥有单视图应用程序也是如此。

为了防止你的控制器双重加载:转到 application.js 并删除 "//= require turbolinks

别客气。

于 2015-06-23T18:57:02.047 回答