2015-04-04 94 views
0

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

回答

1

您需要在范围内引用传递,就像普通控制器。这里有一个简单的例子:

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

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

+0

因此,指令控制器的“$ scope”是否可以访问指令的隔离范围? – 2015-04-04 14:04:16

+0

是的,他们正在访问相同的作用域(如果你在上面的例子中记录它们,你会看到两个作用域的作用域为2)。 – Shomz 2015-04-04 14:40:02

0

可以使用bindToController属性在隔离范围直接绑定声明 属性控制器实例指令内使用。以DDO对象内部指令函数声明为例:

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

};

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