[英]Passing function to angular directive
所以我有我的指令:
<editable comp="comp" key="'quantity'" input-type="'number'" ed-on-change="save()"></editable>
我的指令功能:
function editable() {
return {
restrict: 'E',
scope: {
comp: '=comp',
key: '=key',
inputType: '=inputType',
edOnChange: '=edOnChange'
},
templateUrl: '/Partials/Editable.html',
這是在ng-repeat
運行的,因此被擊中了大約20次。 我在控制器作用域的save()
函數中執行console.log('saved')
,它輸出20次。
有沒有一種方法可以阻止在調用$compile
或$apply
時觸發此函數(因為我猜這是引起它的原因)?
巧合的是,我沒有看到ng-click
具有相同的行為,因此我可能會同時查看源代碼。
解決但不理想
因此,只需在ed-on-change
刪除save
上的()
,然后傳遞save函數的引用,然后在需要時調用它即可。
我將函數傳遞給指令的方式是這樣的:
<editable ... ed-on-change="save"></editable>
注意,我刪除了()
。
然后,在指令中,我將在作用域聲明中使用與編寫相同的方式。
我將在Editable.html
:
<div .. ng-click="edOnChange()"></div>
摘要循環將始終調用屬性名稱中的函數,因為這是它設置該屬性值的方式。
如果您試圖將某個函數的名稱傳遞給該指令,以便在發生某些事件時調用該指令,則應使其僅是該函數的名稱,例如ed-on-change =“ save”。
在我看來,您在這里所做的似乎不是“ Angular”方式,如果您添加更多信息,我可以提供更好的解決方案。
答案是使用$parse
。
<editable ed-on-change="save()"></editable>
在指令中:
.directive('editable', ['$parse', function ($parse) {
return {
restrict: 'E',
link: function (scope, element, attrs) {
var changeCallback = $parse(attrs.edOnChange) || null;
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.