2015-04-04 73 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允許您直接在控制器中使用隔離範圍屬性(在本例中爲文章和標題)。

相關問題