我复制了一个自定义指令watches for changes on form file inputs。Angular:寻找自定义指令语法的解释
angular.module('customDirective', [])
.directive('ngFileInputChange', function() {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var onChangeHandler = scope.$eval(attrs.ngFileInputChange);
element.bind('change', onChangeHandler);
}
};
});
然后,我用它在模板中像这样:
<input ng-model="vm.image" ng-file-input-change="vm.base64Test" ...>
这工作得很好。
然而,这不起作用:
<input ng-model="vm.image" ng-file-input-change="vm.base64Test()" ...>
注意()
在base64Test()
结束。使用通用的ng-click
,括号很好,甚至是必需的(我将如何将参数传递给函数?),但是使用自定义指令时,括号会导致错误。
我只对scope.$eval(attrs.ngFileInputChange)
实际上在做什么有一个模糊的理解,所以也许我可以做一些改变?
编辑:
我还应该补充一点,我需要访问一些范围变量。例如,如果我没有使用自定义指令,我会写这样的事情在我的控制器:
vm.base64Test(associatedData){
console.log(associatedData);
}
然后:
<input ng-change("vm.base64Test(vm.associatedData)">
但是NG-变化不看文件输入内容和自定义指令不允许参数(事件除外),所以我卡住了。
感谢您的回答。我基本上做了你在这里的事情,但我仍然遇到问题。我扩展了我的问题来解释。 – crowhill
你在哪里定义vm.base64test?这听起来像是一个架构问题,你应该在一个控制器的上下文中定义fileChange事件处理函数,该控制器可以访问使用指令的$ scope,这样你就可以用这种方式访问函数。如果不明确,我可以做出一个决定。 – Mator