ngModel を必要とし、フォーマッターとパーサーを追加して値を操作するディレクティブを作成しています。それはうまく機能しますが、操作は $watch する必要がある外部データに依存するため、この時計からモデル値を更新する方法を探しています。呼び出してみました$setViewValue
が、何も起こりません ($viewValue が変更されていないため??)。
次の簡単な例では、「factor」を変更してもモデル値は更新されません。
angular.module('app', []).directive('multiply', multiplyDirective);
function multiplyDirective() {
return {
restrict: 'A',
require: 'ngModel',
scope: {
factor: '=multiply'
},
link: function(scope, elem, attr, ngModel) {
ngModel.$formatters.push(function (value) {
return value / scope.factor;
});
ngModel.$parsers.push(function (value) {
return value * scope.factor;
});
scope.$watch('factor', function () {
// how to run the parsers pipeline to update modelvalue?
ngModel.$setViewValue(ngModel.$viewValue);
});
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular.min.js"></script>
<body ng-app ng-init="factor = 1; value = 1">
<input type="number" ng-model="value" multiply="factor" /> x
<input type="number" ng-model="factor" />
= {{ value }}
</body>
編集:内部$$parseAndValidate
メソッドを呼び出すと機能しますが、更新を強制するパブリック API があるかどうかは疑問です。
ngModel.$setViewValue(ngModel.$viewValue);
編集: の動作が で変更されたことがわかりました1.3.0
。1.2.x
コードを使用するとうまくいきます!