如何在指令的控制器中使用隔离范围?

How to use isolate scope inside directive's controller?

我有一些非常简单的东西,类似于下面。我的问题是如何使隔离范围在指令的控制器内可用:(For a full jsbin version, click here!)

app.directive("data", function() {
  return {
    restrict: "E",
    template: "<div>My Data</div>",
    scope: {
      myData : '='
    },
    require: "data",
    controller: function(){
      this.logData = function(){
        console.log(scope.myData);
      }
    },
    link:function(scope,element,attrs,ctrl){
      console.log(scope.myData); //works!
      ctrl.logData(); //scope is not defined
    }
  }
})

您需要传入作用域引用,就像使用常规控制器一样。这是一个简单的例子:

controller: function($scope){
  this.logData = function(){
    console.log($scope.myData);
  }
},

http://plnkr.co/edit/oossm0g48PnPc3e89P2v?p=preview

您可以使用 bindToController 属性 来绑定声明 将范围内的属性直接隔离到指令中使用的控制器实例。在指令函数声明中遵循 DDO object 的示例:

var ddo = {
templateUrl: 'example.html',
scope: {
  articles: '<',
  title: '@'
},
controller: ExampleDirectiveController,
controllerAs: 'myCtrl',
bindToController: true

};

bindToController 设置为 true 允许您直接在控制器内使用隔离范围属性(在本例中为文章和标题)。