2013-11-21 73 views
3

這似乎很簡單,我在某種程度上工作,但是我的解決方案存在一些問題。AngularJs:來自指令屬性的呼叫功能

這種情況是我想將一個函數(toggleValue())傳遞給一個指令,然後通過指令模板中的ngChange調用該函數。基本設置是:

// html 
<div class="my-directive" ng-model="my_model" ng-change="toggleValue()"></div> 

// angular directive 
myApp.directive('myDirective', function() { 
    return { 
     scope: { 
     restrict: 'C', 
     model: '=ngModel', 
     action: '=ngChange' 
     }, 
     template: '<input type="checkbox" ng-model="model" ng-change="action">' 
    } 
} 

這有點過分簡化了,因爲它超出了上下文範圍,但它證明了我正在嘗試做什麼。這也適用。問題在於它被調用了幾次 - 甚至在它被明確調用之前。這似乎是由於對動作的雙向綁定。據我所知,&應該用於隔離方法,但當我將操作改爲'&ngChange'時,函數toggleValue()根本不會被調用。

我想結合的解決方案在Call a controller function from a directive without isolated scope in AngularJS,但沒有取得任何結果。使用$apply()給了我一個消化錯誤,並且使用$eval()沒有響應。

link: function (scope, element, attrs) { 
    scope.$eval(attrs.action); 
} 

回答

4

要傳遞的功能,你需要在範圍定義中使用&=

action: '&ngChange' 

然後你需要調用的指令模板中的作用:

ng-change="action()" 
+0

我知道它必須是簡單的東西。沒想到它會像添加括號一樣簡單。謝謝。 – iamsar