Angularjs 错误:指令中没有控制器

Angularjs 错误:指令中没有控制器,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,各位, 我是AngularJS新手,我正在尝试使用AngularJS创建绑定到模型层次结构的基本HTML层次结构。我的顶层模块如下所示: var myList = angular.module('myList', []); myList.directive('myItemList', function factory() { var directiveDefinitionObject = { priority: 0, templateUrl: '/asse

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

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;
});
angular.module('fooApp',['ngResource','myList']),在我的页面的根div处声明为ng app=“fooApp”

然后,我的页面中有如下HTML:

<my-item-list/>
部分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> 
错误:没有控制器:myItemList
错误()
在h(http://localhost:9000/assets/javascripts/angular.min.js:41:458)
在我(http://localhost:9000/assets/javascripts/angular.min.js:43:415)
在http://localhost:9000/assets/javascripts/angular.min.js:48:191
在http://localhost:9000/assets/javascripts/angular.min.js:94:307
在h(http://localhost:9000/assets/javascripts/angular.min.js:78:33)
在http://localhost:9000/assets/javascripts/angular.min.js:78:266
在目标位置,例如$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)
在Object.e.$apply(http://localhost:9000/assets/javascripts/angular.min.js:88:506)  

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

它看起来像是Angular中的错误:

您的指令真的需要控制器吗?我想说,10个指令中有9个不需要自己的控制器(大多数指令只需要
link

从指令中删除
控制器
时,错误似乎消失了


编辑:更具体地说,当您组合
controller
compile
时,似乎会出现问题。任何其他组合(controller+link、compile+link或任何组合本身)都可以正常工作。

找到了解决此问题的方法

指令应该是嵌套的,例如

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

请在此处查看:


设置一个plnkr,用于复制您的问题…在JSFIDLE中运行良好(进行了一些小的更改):.您是否在任何地方指定了
ng controller
?请记住,这不仅仅是一个顶级指令。我的ng应用程序位于一个div上,我在同一个顶级div上指定了ng控制器。主应用程序模块有一个为模型建模的控制器。第二个模块(myList)包含一个指令,该指令有一个模板URL而不是模板。因此,当我从模板URL文件中获取HTML并将其直接放在template:参数中时,一切正常。我只得到“no controller”使用模板URL时出现的错误消息看起来像一个bug:您的指令真的需要控制器吗?当您删除
控制器
时,错误似乎也消失了。就是这样!!我从指令定义中删除了controller:属性,它现在可以与模板URL一起使用。