私はinput-text
と呼ばれる簡単な指示文を持っています。これは基本的に入力コントロールをラップします。カスタムディレクティブに変更をラップする方法は?
input-text
に与えられた値はng-model
に渡され、正常に動作します。今私はまた、input-change
という属性にこれを渡すことによって、モデルの変更に応じて呼び出される関数を渡したいと思います。
angular.module('test').directive('inputText', function() {
return {
restrict : 'A',
scope : {
inputText : '='
},
template : '<input ng-model="inputText" />',
link : function(scope, element, attr) {
var model = element.find('input').controller('ngModel');
model.$viewChangeListeners.push(function() {
scope.$parent.$eval(attr.inputChange);
});
}
}
});
詳細はhttp://plnkr.co/edit/qC7FlxVNKH4SrAhLoJy4を参照してください。
コントロールに入力するたびに関数が呼び出されますが、コンソールにログインした値は現在のコントロール(ただし前のもの)の$viewValue
ではありません。
Iはまた、そうのような入力制御にng-change
input-change
にに与えられた文字列を渡すことにより、別のアプローチを試みた:
angular.module('test').directive('inputText', function() {
return {
restrict : 'A',
scope : {
inputText : '=',
inputChange : '&'
},
template : '<input ng-model="inputText" ng-change="inputChange()" />',
}
});
http://plnkr.co/edit/SutAFnCgo10QNmvBFsDs
をしかし、出力が上記の例と同様です。
誰かがこの動作を説明したり、ここで何が問題になっているのかを教えてください。
私も前に、あなたの最初の提案を試みたが、これは私が関数にパラメータの変化量を置きたいかもしれないので、非常に柔軟性のないことを思い付きました。 2番目はかなり明白であり、うまくいきます、ありがとう。それでも、私の説明したケースでは、なぜその動作が奇妙なのかを知りたいと思います。 –
@ M.Redemskeオプション1を使用すると、他の変数を使用することはできません。それは地元の人々として 'value'を追加しません。たとえば、 'test.callback(model1、value、model2)'と、スコープの上にあるmodel1とmodel2と、そのディレクティブが提供する 'value'を書くことができます。なぜあなたが問題を抱えているかについては、私も個人的にそれを得て、それがAngular自身のバグかng-changeで明確ではないバグか分かっていませんでした。 – floribon