我複製了一個自定義指令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