ngModel.$解析器忽略ng-model值末尾的空格
ngModel.$parsers ingore whitespace at the end of ng-model value
我有这样的指令:
.directive('noWhitespace', ['$parse', function($parse) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, ngModel) {
/*
scope.$watch(attrs.ngModel, function(value) {
var getter = $parse(value);
update(getter(scope));
});
*/
function update(viewValue) {
console.log(JSON.stringify(viewValue));
if (viewValue.match(/'s/)) {
ngModel.$setValidity('whitespace', false);
return undefined;
} else {
ngModel.$setValidity('whitespace', true);
return viewValue;
}
}
ngModel.$parsers.unshift(update);
}
};
}])
,当我像这样使用它时:
<form name="something" novalidate>
<input ng-model="myValue" no-whitespace/>
<div ng-show="something.myValue.$error.whitespace">
Error
</div>
</form>
,然后我输入一些东西,然后在末尾有几个空格,直到我在这些空格之后输入字符,update
才被调用,然后我得到错误,我有空格。(当我在开头放空格或只放空格时,也会发生同样的情况)。这是为什么?如何解决?正如你在评论中看到的,我试图使用$watch+$parse
,但得到错误Cannot read property 'match' of undefined
。
在你的模板中试试:
<form name="something" novalidate>
<input ng-model="myValue" no-whitespace ng-trim="false"/>
<div ng-show="something.myValue.$error.whitespace">
Error
</div>
</form>
这将解决ng-model在输入空格时不更新的问题。
这是angular中模型解析器的预期行为,其想法是,如果输入的文本不正确(最后有空格),ngModel
应该返回undefined
。当你想到它,为什么你要保存一个值到ngModel
无论如何,如果它是不正确的根据您的验证?
这是相关位:
if (viewValue.match(/'s/)) {
ngModel.$setValidity('whitespace', false);
return undefined;
}
您将有效性设置为false并返回undefined
。
您可以保持模型更新,即使它的值没有通过返回viewValue
总是验证:
if (viewValue.match(/'s/))
ngModel.$setValidity('whitespace', false);
else
ngModel.$setValidity('whitespace', true);
// Return viewvalue regardless of whether it validates or not
return viewValue;
相关文章:
- 从 Javascript 中设置 ng-model name
- Toggle Switch在包含ng model和ng repeat之后不进行切换
- 在Angularjs中,我如何使用ng repeat、ng model和ng click来动态更改内容
- 当与之关联的 ng-model 为 false 时,Angularjs 复选框值不会取消选中
- ng-model 绑定到选择标签生成的空默认值
- 对象不能在angularjs ng-model中访问
- 为什么 HTML 中的 Value 属性在与 AngularJS 中的 ng-model 一起使用时不起作用
- ng-repeat不绑定ng-model对象数组
- AngularJS:ng-model 绑定在使用 jQuery 更改时不会更新
- 选择/选项 ng-model 未绑定 ng-selected
- Angular ng-model 将数据作为数组发送到 rails-api
- 为什么 AngularJS 在使用 ng-model 时不会在文本框上设置长度属性
- AngularJS:Ng:init-如何分配Ng:model
- 在指令中使用 ng-model 和 ng-repeat
- 使用 angularjs 访问控制器中的 ng-model 数据
- 如何在 Angularjs 中为 ng-model 增加价值
- 如何在 AngularJS 中将 ng-model 值检索到控制器
- 从角度“ng-model”选择元素中选择第一个选项,带有一个按钮
- 使用 ID 更新文本区域值,而不是在 AngularJs 中使用 ng-model
- ngModel.$解析器忽略ng-model值末尾的空格