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;
}
});