错误:指令中没有控制器

时间:2013-06-03 18:04:40

标签: angularjs angularjs-directive angularjs-ng-repeat

民间,   我是一个AngularJS新手,我正在尝试使用Angular创建绑定到模型层次结构的基本HTML层次结构。我的顶级模块如下所示:

angular.module('fooApp',['ngResource','myList'])在我的页面的根div处声明为ng-app =“fooApp”。

然后我在页面中看到这样的HTML:

<my-item-list/>

我有第二个模块,如下所示:

var myList = angular.module('myList', []);
myList.directive('myItemList', function factory() {
    var directiveDefinitionObject = {
        priority: 0,
        templateUrl: '/assets/partials/my-item-list.html',
        replace: false,
        transclude: false,
        restrict: 'E',
        scope: false,
        controller: function($scope, $element, $attrs, $transclude) {
            // No Op
            $scope.foo = 'bar';
        },
        compile: function compile(tElement, tAttrs, transclude) {
            return {
                pre: function preLink(scope, iElement, iAttrs, controller) {
                    // No Op
                },
                post: function postLink(scope, iElement, iAttrs, controller) {
                    // No OP
                }
            }
        },
        link: function postLink(scope, iElement, iAttrs) {
            // No Op
        }
    };
    return directiveDefinitionObject;
});

部分HTML模板只包含表格和标签上的ng-repeat。模板渲染得很好,但我的JavaScript控制台包含:

Error: No controller: myItemList
    at Error (<anonymous>)
    at h (http://localhost:9000/assets/javascripts/angular.min.js:41:458)
    at i (http://localhost:9000/assets/javascripts/angular.min.js:43:415)
    at http://localhost:9000/assets/javascripts/angular.min.js:48:191
    at http://localhost:9000/assets/javascripts/angular.min.js:94:307
    at h (http://localhost:9000/assets/javascripts/angular.min.js:78:33)
    at http://localhost:9000/assets/javascripts/angular.min.js:78:266
    at Object.e.$eval (http://localhost:9000/assets/javascripts/angular.min.js:88:347)
    at Object.e.$digest (http://localhost:9000/assets/javascripts/angular.min.js:86:198)
    at Object.e.$apply (http://localhost:9000/assets/javascripts/angular.min.js:88:506) <my-item-list> 

我打算增加嵌套(例如用另一个指令替换HTML部分模板,我真的需要弄清楚我做错了什么。感觉我正在做某种新手的错误。每当我在我的指令定义中添加了'require'属性,我得到了相同的“无控制器”错误消息,但是带有我需要的名称(即使我尝试并要求ngRepeat或页面的主控制器)。

2 个答案:

答案 0 :(得分:6)

它似乎是Angular中的一个错误:http://github.com/angular/angular.js/issues/1903

你的指令真的需要一个控制器吗?我会说10个指令中有9个不需要自己的控制器(大部分只需要link)。

从指令中删除controller时,错误似乎消失了。

修改:更具体地说,当您合并controllercompile时,似乎会出现问题。任何其他组合(控制器+链接,编译+链接,或任何他们自己)工作正常。

答案 1 :(得分:1)

为此找到了解决方案......

指令应该嵌套,例如,

<directive-parent>
  <directive-child></directive-child>
</directive-parent>

在这里查看:

https://groups.google.com/d/msg/angular/SRKL0wZtSew/6sToIKLkRHQJ