And*_*own 123 dom-manipulation angularjs angularjs-filter angularjs-ng-model
我有一个文本输入,我不想让用户使用空格,键入的所有内容都将变为小写.
我知道我不允许在ng-model上使用过滤器,例如.
ng-model='tags | lowercase | no_spaces'
Run Code Online (Sandbox Code Playgroud)
我查看了创建自己的指令但是添加了函数$parsers并且$formatters没有更新输入,只更新了其他元素ng-model.
如何更改我正在输入的输入?
我本质上是在尝试创建"标签"功能,就像StackOverflow上的功能一样.
pko*_*rce 203
我认为AngularJS输入的意图和ngModel目标是无效输入永远不会在模型中结束.该模型应始终有效.拥有无效模型的问题在于我们可能会让观察者根据无效模型触发并采取(不适当的)操作.
正如我所看到的,这里适当的解决方案是插入$parsers管道并确保无效输入不会进入模型.我不确定你是如何尝试处理事情或者究竟什么不适合你的$parsers但是这里有一个简单的指令来解决你的问题(或至少我对问题的理解):
app.directive('customValidation', function(){
return {
require: 'ngModel',
link: function(scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function (inputValue) {
var transformedInput = inputValue.toLowerCase().replace(/ /g, '');
if (transformedInput!=inputValue) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
一旦声明了上述指令,就可以像这样使用它:
<input ng-model="sth" ng-trim="false" custom-validation>
Run Code Online (Sandbox Code Playgroud)
正如@Valentyn Shybanov提出的解决方案一样,ng-trim如果我们想要在输入的开头/结尾处禁止空格,我们需要使用该指令.
这种方法的优点是双重的:
Pie*_*hat 23
解决此问题的方法可能是在控制器端应用过滤器:
$scope.tags = $filter('lowercase')($scope.tags);
不要忘记声明$filter为依赖.
如果您使用的是只读输入字段,则可以将ng-value与过滤器一起使用.
例如:
ng-value="price | number:8"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208103 次 |
| 最近记录: |