【发布时间】:2014-12-19 12:02:21
【问题描述】:
我正在编写一个需要 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 代码有效!
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-ng-model