watches for changes on form file inputsというカスタムディレクティブをコピーしました。角度:カスタムディレクティブの構文についての説明を参照してください
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)
は実際に何をしているのかわかりません。多分私はその中でいくつかの変更を加えることができますか?
EDIT:
私も私はいくつかのスコープ変数にアクセスする必要があることを追加する必要があります。例えば、私はカスタムディレクティブを使用する必要がなかった場合、私は私のコントローラでこのような何かを記述します。
vm.base64Test(associatedData){
console.log(associatedData);
}
そして:
<input ng-change("vm.base64Test(vm.associatedData)">
しかし、NG-の変化は見ていませんファイルの入力内容とカスタムディレクティブは(イベント以外の)引数を許可しないので、私は立ち往生しています。
答えをありがとう。私は基本的にあなたがここにいることをしましたが、私はまだ問題にぶち当たっています。私は説明のために私の質問を広げた。 – crowhill
どこでvm.base64testを定義していますか?これはアーキテクチャの問題のように思えますが、そのような関数にアクセスできるように、ディレクティブが使用されている$ scopeにアクセスできるコントローラのコンテキストで、fileChangeイベント処理関数を定義する必要があります。これがはっきりしない場合、私はplunkrを作ることができます。 – Mator