错误:没有控制器

时间:2013-03-30 22:22:29

标签: angularjs

我有两个指令,我希望在其中一个API中公开API供其他人使用。遵循this example的指导,当我需要其他指令的控制器时,我收到此错误:

Error: No controller: foo
    at Error (<anonymous>)
    at getControllers (http://localhost:3000/vendor/angular/angular.js:4216:19)
    at nodeLinkFn (http://localhost:3000/vendor/angular/angular.js:4345:35)
    at compositeLinkFn (http://localhost:3000/vendor/angular/angular.js:3953:15)
    at publicLinkFn (http://localhost:3000/vendor/angular/angular.js:3858:30)
    at <error: illegal access>
    at Object.Scope.$broadcast (http://localhost:3000/vendor/angular/angular.js:8243:28)
    at http://localhost:3000/vendor/angular/angular.js:7399:26
    at wrappedCallback (http://localhost:3000/vendor/angular/angular.js:6780:59)
    at wrappedCallback (http://localhost:3000/vendor/angular/angular.js:6780:59) <bar class="ng-scope"> 

我的指令定义如下:

})
    .directive('foo', function() {
        return {
            restrict: 'E',
            template: '<h1>Foo</h1>',
            controller: function($scope) {
                $scope.someArray = [];

                this.doStuff = function() {
                   $scope.someArray.push('abc');
                }
            },
            link: function(scope, element, attrs) {

            }
        }
    })
    .directive('bar', function() {
        return {
            require: 'foo',
            restrict:'E',
            template: '<h1>Bar</h1>',
            link: function(scope, element, attrs, fooCtrl) {
                element.bind('mouseent', function() {
                    fooCtrl.doStuff();
                })
            }
        }
    })

有谁知道为什么第二个指挥不能看到第一个指令的控制器?

谢谢,

1 个答案:

答案 0 :(得分:4)

指令定义对象中的

require属性将控制器注入链接函数。

但是:该指令不是自己发起的,你还需要在元素中声明foo指令。喜欢:<div foo="hello" bar="world"></div>

此外,它有2个可以组合的前缀。

  1. ?:“使需求可选”,不会引发任何错误。
  2. ^:“在父元素中查找它”,通常是预期在同一元素上的必需指令。这使它可以在父元素中搜索。