我正在编写一个需要 ngModel 并添加格式化程序和解析器来操作值的指令。它工作得很好,但由于操作取决于我必须 $watch 的外部数据,我正在寻找一种方法来更新这个手表的模型值。我试图打电话$setViewValue
但没有任何反应(因为 $viewValue 没有改变??)。
在以下简单示例中,对“因子”的更改不会更新模型值:
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
代码有效!