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

时间:2015-04-04 00:09:07

标签: angularjs angularjs-directive

我有一些非常简单的东西,如下所示。我的问题是如何在指令的控制器中使隔离范围可用:(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
    }
  }
})

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您可以使用bindToController属性绑定声明的内容 隔离范围中的属性直接指向指令内使用的控制器实例。在指令函数声明中跟随DDO对象的示例:

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

};

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