【发布时间】:2017-06-14 23:37:51
【问题描述】:
所以我在控制器中有一个十进制值,如下所示:
// Controller
var MyController = function($scope) {
...
$scope.percentValue = 0.05; // can be stored
...
};
<!-- View -->
<span>{{percentValue}}</span>
<input ng-model="percentValue" />
使用上面的代码,input 元素中的值是 0.05 - 但是,我希望允许用户输入一个整数值,例如 5。
所以如果 $scope.percentValue 是0.05,我想在输入元素中显示为5。如果用户输入5,$scope.percentValue 应该是0.05。
然而,这里棘手的是我只想更新视图值 - 这意味着span 元素仍应显示0.05。只有输入元素中的值应该是5。
我正在尝试使用 ngModel 来实现这一目标,但我仍在苦苦挣扎。
这就是我现在拥有的:
var MyDirective = function() {
function link(scope, element, attrs, ngModel) {
ngModel.$render = function() {
element.val(ngModel.$viewValue || '');
};
ngModel.$formatters.push(function (value) {
return value * 100;
});
element.on('change blur', function() {
ngModel.$setViewValue(element.val());
});
}
return {
restrict: 'A',
require: '?ngModel',
scope: {},
link: link
};
};
请指教!!
【问题讨论】:
-
尝试使用过滤器。
-
@KimchiMan,您已经在使用
$formatters来转换模型表示以进行显示,所以只需简单地定义一个$parsers以另一种方式进行,就像这样—plnkr.co/edit/lB6GaT1ZSrVsOi9PS1u9?p=preview跨度> -
@miqid,你的答案正是我想要的——你能在答案部分添加代码吗?我会把它标记为答案
-
@miqid 也是,我想知道是否有一种方法可以不使用
value / 100 -
@KimchiMan,对于期望或允许用户输入该输入的内容是否有任何限制?您正在构建的任何其他上下文也可能有所帮助。如果
$formatters已经在做value * 100,我不明白为什么value / 100没有意义。
标签: javascript angularjs angularjs-directive angularjs-model