2013-02-21 77 views
2

我剛剛開始與angularJS,我有一個問題讓我的頭圍繞指令和控制器的範圍。訪問控制器從一個指令中的指令,有一個孤立的範圍

在我已經鏈接到下面的例子中,我有一套兩個指令;一個屬性指令(showMessage)和一個元素指令(parentDirective)。

http://jsfiddle.net/ejSxM/1/

我想使用showMessage作爲行爲,以便被點擊的元素時,它觸發一個控制器中的功能。這在正常的html元素上工作正常,但是當我將它應用於我的parentDirective,showMessage時,其範圍爲parentDirective,而不是控制器。

這可以在附件中演示。當點擊「我是我自己」時,該指令具有控制器的範圍,因此控制器作用域中的showMessage函數調用正常。然而,當單擊「我是指令」時,指令現在具有父指令的範圍,並標記出錯。

是否有一種方法可以從嵌套指令訪問控制器作用域,即使父指令具有隔離範圍?

回答

4

您可以在表達式中傳遞給你的指令是這樣的: <my-directive onsomeevent="functionInMyController()"></my-directive>

,然後在指令:

... 
scope: { 
    onevent: '&onsomeevent' 
}, 
link: function() { 
    element.bind('click',function() { 
     scope.onevent(); 
    }); 
} 
... 

也就是說,您綁定從onsomeevent參數的表達,這樣就可以執行它在你的指令內而不知道表達是什麼。該表達式在父作用域上執行,因此需要在父作用域中定義functionInMyController。您也可以將鏈接函數中的變量傳遞給該表達式,您可以在此找到示例(在範圍部分中)directives

+0

感謝您的幫助。這種不同的方法完全符合我的需求,並且我可以取消現在不必要的行爲指令。如果有人感興趣,這裏是另一個使用上述方法的jsfiddle:http://jsfiddle.net/HDEF7/3/ – Sam 2013-02-21 15:25:25

1

您可以爲指令設置控制器。

controller - Controller constructor function. The controller is instantiated 
before the pre-linking phase and it is shared with other directives if they 
request it by name (see require attribute). 
This allows the directives to communicate with each other and augment each other's 
behavior. The controller is injectable with the following locals: 
$scope - Current scope associated with the element 
$element - Current element 
$attrs - Current attributes obeject for the element 
$transclude - A transclude linking function pre-bound to the correct transclusion 
scope:  
function(cloneLinkingFn). 

http://docs.angularjs.org/guide/directive

相關問題