Angular使用另一个指令的控制器?

时间:2013-07-08 20:10:13

标签: angularjs angularjs-directive angularjs-controller

如果我有两个指令,并且需要让其中一个使用另一个指令的控制器,那么在角度中完成类似的操作的最佳方法是什么?我正在尝试使用我在文档中看到的require: otherDirective内容,但我得到的是

错误:无控制器:dirOne

来自以下示例。我的印象是,通过在require语句中指定dirOne,dirTwo可以访问dirOne的控制器。我在这做错了什么?

Here's a plunkr as well

var app = angular.module('myApp', []);

app.directive('dirOne', function() {
  return {
    controller: function($scope) {

      $scope.options = {
        "opt1" : true, 
        "opt2" : false, 
        "opt3" : false, 
      }

      this.getOptions = function() {
        return $scope.options;
      };

    }
  };
});

app.directive('dirTwo',function() {
  return {
    require: 'dirOne',
    link: function(scope, element, attrs, dirOneCtrl) {
      $scope.options = dirOneCtrl.getOptions();
      alert($scope.options);
    }
  };
});

1 个答案:

答案 0 :(得分:2)

http://plnkr.co/edit/vq7vvz

你的傻瓜有两个问题:

为了使指令要求另一个指令的控制器,这两个指令必须在同一个元素上,或者如果使用^表示法,则必需的指令可以在父元素上。

  <div dir-one dir-two></div>

此外,在第二个指令中,您调用了参数&#34; scope&#34;但后来尝试将其用作&#34; $ scope&#34;。

link: function(scope, element, attrs, dirOneCtrl) {
  scope.options = dirOneCtrl.getOptions();
  alert(scope.options);
}