所以我有我的指示:
<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次。我在控制器范围的console.log('saved')
函数中执行save()
,并输出20次。
有没有办法在调用$compile
或$apply
时阻止此函数被触发(因为我猜这是造成它的原因)?
巧妙的是,我没有看到ng-click
具有相同的行为,所以我可能会同时查看源代码。
已解决但不理想
所以只需删除()
中save
上的ed-on-change
,然后传入保存功能的引用,然后在我想要的时候调用它。
答案 0 :(得分:0)
我将函数传递给指令的方式如下:
<editable ... ed-on-change="save"></editable>
注意我删除了()
。
然后,在指令中我将在范围声明中以与您编写的方式相同的方式。
我会在Editable.html
:
<div .. ng-click="edOnChange()"></div>
答案 1 :(得分:0)
摘要循环将始终调用属性名称中的函数,因为这是设置该属性值的方式。
如果您尝试将函数的名称传递给指令,以便在某些事件发生时调用该指令,那么您应该将其作为该函数的名称,例如ED-平变化=&#34;保存&#34;
在我看来,你在这里所做的并不完全是&#34; Angular&#34;方式,如果您添加更多信息,我可以提供更好的解决方案。
答案 2 :(得分:0)
答案是使用$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;
}
});