gpt4 book ai didi

angularjs - 我可以使用 ngModelController 的 $formatter 来完全控制输入字段的呈现方式吗?

转载 作者:行者123 更新时间:2023-12-04 04:37:23 27 4
gpt4 key购买 nike

我正在尝试进行模拟 type="number" 的输入但我想添加我自己的按钮。基本上我已经做了

<form name="fasdf">
<button class="btn" ng-click="decrement()">&#9668;</button>
<input type="text" ng-model="model" display-as-number />
<button class="btn" ng-click="increment()">&#9658;</button>
</form>

我正在使用 input type="text"因为我不希望用户代理将它自己的按钮添加到该字段。

应该可以使用 input本身输入一个值以及使用按钮来增加或减少值。
angular.module('app',[])
.controller('Ctrl', ['$scope', function($scope) {

$scope.model = 0;

$scope.decrement = function() {
$scope.model--;
};

$scope.increment = function() {
$scope.model++;
};

}])

该值最初为 0但是当用户开始输入文本时,我希望在他们键入时去掉任何前导零(好吧,实际上西装想要这样,但你明白我的意思)。

我的理论是我可以使用 $formatter和/或 $parser通过创建访问 ngModelController 的指令来做到这一点.
angular.module('app')
.directive('displayAsNumber', [function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, controller) {

controller.$formatters.push(function (modelValue) {
var value = parseInt(modelValue, 10);
return value;
});

controller.$parsers.push(function (viewValue) {
var value = parseInt(viewValue, 10);
return value;
});
};
}]);

但是虽然 $formatter每次我在输入中输入内容时都会运行它,它不会覆盖输入字段的实际值,换句话说,它不会去除任何前导零。

通过用
element.on('focus', function() {
var value = parseInt(element.val(), 10);
if (value === 0)
element.val('');
});

element.on('focusout', function() {
if ('' === element.val().trim())
element.val(0);
else
element.val(parseInt(element.val(), 10));
});

产生的行为已经足够好(如果值为 0,它将在焦点上清除字段,并在焦点输出时去除前导 0s

问题是,有没有什么方法可以在不向 element 添加事件监听器的情况下实现这种行为? ?
如何使用 ngModelController 正确控制输入的呈现方式?

公众号: http://plnkr.co/edit/YOkFGNGamfA1Xb9pOP1U?p=preview

最佳答案

所以,是的,在查看了其他新问题后,我看到了 this并意识到我只是错过了对 controller.$render() 的调用

controller.$parsers.push(function (viewValue) {
var value = parseInt(viewValue, 10);
controller.$viewValue = value;
controller.$render();
return value;
});

解决了我的问题。我现在就走。

关于angularjs - 我可以使用 ngModelController 的 $formatter 来完全控制输入字段的呈现方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com