Gus*_*tav 4 angularjs angularjs-directive angularjs-controller
我有(以下)html:
    <div ng-controller="MyController">
       <my-sub-directive></my-sub-directive>
    </div>
控制器的外观并不重要:
app.controller("MyController", function($scope) {
   $scope.foo = "bar";
})
我的指令看起来像这样:
function mySubDirective() {
        return {
            restrict: "E",
            templateUrl:"aTemplate.html",
            require: "^MyController",
            link: function($scope, element) {
            }
        };
    }
app.directive("mySubDirective", mySubDirective);
在文档中,他们总是在require-property中指定另一个指令,但它表示这意味着你需要控制器.所以我想尝试这个解决方案.但是我得到了错误
"无法找到指令'mySubDirective'所需的控制器'MyController'".
如果由ng-controller设置,是否不能要求指令中的控制器?
你只能这样做:
require: "^ngController"
所以,你不能比那更具体,即你不能要求"MainCtrl"或"MyController"通过名称,但它会得到控制器实例:
.controller("SomeController", function(){
   this.doSomething = function(){
     //
   };
})
.directive("foo", function(){
  return {
    require: "?^ngController",
    link: function(scope, element, attrs, ctrl){
      if (ctrl && ctrl.doSomething){
        ctrl.doSomething();
      }
    }
  }
});
<div ng-controller="SomeController">
   <foo></foo>
</div>
我不认为,虽然,这是一个很好的方法,因为它使指令非常依赖于地方使用它.您可以按照注释中的建议直接传递控制器实例 - 它使它更明确一些:
<div ng-controller="SomeController as ctrl">
  <foo ctrl="ctrl"></foo>
</div>
但它仍然是一个过于通用的对象,很容易被指令的用户误用.
相反,公开一个定义良好的API(通过属性)并将引用传递给控制器中定义的函数/属性:
<div ng-controller="SomeController as ctrl">
  <foo do="ctrl.doSomething()"></foo>
</div>
| 归档时间: | 
 | 
| 查看次数: | 1714 次 | 
| 最近记录: |