Javascript 传递函数到角度指令

Javascript 传递函数到角度指令,javascript,angularjs,Javascript,Angularjs,所以我有我的指示: <editable comp="comp" key="'quantity'" input-type="'number'" ed-on-change="save()"></editable> .directive('editable', ['$parse', function ($parse) { return { restrict: 'E', link: function (scope, element, a

所以我有我的指示:

<editable comp="comp" key="'quantity'" input-type="'number'" ed-on-change="save()"></editable> 
.directive('editable', ['$parse', function ($parse) {
    return {
        restrict: 'E',
        link: function (scope, element, attrs) {
            var changeCallback = $parse(attrs.edOnChange) || null;
        }
});
这是在一个
ng repeat
中运行的,因此会被击中大约20次。我在控制器作用域中的
save()
函数中执行
console.log('saved')
,并输出20次

当调用
$compile
$apply
时,是否有方法阻止该函数被激发(我猜这就是导致该函数激发的原因)

巧合的是,我没有看到具有相同行为的
ng click
,因此我可能会同时查看源代码

已解决但不理想


因此,只需删除
ed on change
save
上的
()
,传入save函数的引用,然后在需要时调用它。

我将函数传递给指令的方式如下:

<editable ... ed-on-change="save"></editable>

摘要循环将始终调用属性名称中的函数,因为这是它设置该属性值的方式

如果您试图将函数名传递到指令中,以便在某个事件发生时调用该指令,则应使其仅为该函数的名称,例如ed on change=“save”


在我看来,您在这里所做的并不是“角度”的方式,如果您添加更多信息,我可以提供更好的解决方案。

答案是使用
$parse

<editable ed-on-change="save()"></editable>

是否不希望在$compile上调用save()?如果这解决了我的问题?我要问的是,调用save()函数是否就是问题所在?只有在指令链接函数中调用save()函数时才应该调用它。如果服务器在被触发之前被调用了20次,将对其性能造成巨大影响。因为作用域是隔离的,如果我删除它,我将无法在
链接()中访问它。
<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;
        }
});