AngularJS错误:[$ controller:ctrlreg]控制器未注册

时间:2017-03-16 00:56:46

标签: ruby-on-rails angularjs

StackOverflow Peeps,

我对标题中引用的错误有点疑问。我已经搜索过AngularJS文档,以前编写的代码和现有的StackOverflow问题/答案,但都无济于事。首先,这是一个以前编写的Angular控制器,它可以正常工作:

Correct, functioning controller

这是故障控制器:

Malfunctioning controller

特别令人沮丧的是,我完全将我的代码从功能正常的Angular控制器(" focus_groups_ctrl")复制到我的新控制器中(" agencies_ctrl"),并简单地更新了变量/参数名称来反映这一点。我在这里错过了什么?在api / v1 / agencies中呈现的JSON数据工作正常,我的HTML页面正确地被包裹了#34;在ng-app和ng-controller属性中。请让我知道,随时提出要求!谢谢!

以下是故障代码:

/* global angular */

(function() {
  "use strict";

  angular.module("app", ["ngAnimate"]).controller("agencies_Ctrl", function($scope, $http) {
    $scope.setup = function() {
      $http.get('/api/v1/agencies' + window.location.search).then(function(response) {
        $scope.agenciesOffset = 0;
        $scope.agenciesCount = 5;
        $scope.agencies = response.data;
        console.log($scope.agencies);
      });
    };
    var i = 5;
    $scope.nextLoad = function() {
      $scope.agenciesOffset = i;
      i += 5;
    };
  });
}());
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

以下是正常运行的代码:

/* global angular */

(function() {
  "use strict";

  angular.module("app", ["ngAnimate"]).controller("focus_groups_Ctrl", function($scope, $http) {
    $scope.setup = function() {
      $http.get('/api/v1/focus-groups' + window.location.search).then(function(response) {
        $scope.focusGroupOffset = 0;
        $scope.focusGroupCount = 5;
        $scope.focusGroups = response.data;
        console.log($scope.focusGroups);
      });
    };
    var i = 5;
    $scope.nextLoad = function() {
      $scope.focusGroupOffset = i;
      i += 5;
    };
  });
}());
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

1 个答案:

答案 0 :(得分:3)

使用angular.module API意外重新定义模块也可能导致未知控制器错误,如以下示例所示。

angular.module("app", ["ngAnimate"]).controller("agencies_Ctrl", fn1); 

angular.module("app", ["ngAnimate"]).controller("focus_groups_Ctrl", fn2);

要解决此问题,请确保仅在整个项目中使用angular.module(name, [requires])语法定义每个模块。检索它以供angular.module(name)的后续使用。固定示例如下所示。

angular.module("app", ["ngAnimate"]);

angular.module("app").controller("agencies_Ctrl", fn1); 

angular.module("app").controller("focus_groups_Ctrl", fn2);