首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngModel.ngModel值末尾的$parsers空格

ngModel.ngModel值末尾的$parsers空格
EN

Stack Overflow用户
提问于 2014-06-05 12:31:59
回答 2查看 2.3K关注 0票数 3

我有这样的指令:

代码语言:javascript
复制
  .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);
      }
    };
  }])

当我像这样使用它时:

代码语言:javascript
复制
<form name="something" novalidate>
  <input ng-model="myValue" no-whitespace/>
  <div ng-show="something.myValue.$error.whitespace">
    Error
  </div>
</form>

我键入了一些内容,然后在结尾处很少有空格被调用,直到我在这些空格之后键入字符,然后我得到了有空格的错误。(当我把空格放在开头或只有空格时,也会发生同样的情况)。为什么是这样,怎么解决呢?正如您在注释中看到的,我尝试使用$watch+$parse,但得到了错误Cannot read property 'match' of undefined

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-05 13:42:24

在模板中尝试以下内容:

代码语言:javascript
复制
<form name="something" novalidate>
  <input ng-model="myValue" no-whitespace ng-trim="false"/>
  <div ng-show="something.myValue.$error.whitespace">
    Error
  </div>
</form>

这将解决当输入空空间时ng模型不更新的问题。

编辑: Derp,属性在输入元素中,而不是在div中。

票数 8
EN

Stack Overflow用户

发布于 2014-06-05 12:48:46

这是模型解析器的预期行为,如果输入的文本不正确(最后有空格),则ngModel应该返回undefined。当您考虑这个问题时,如果根据您的验证结果不正确,为什么要将值保存到ngModel呢?

这是相关的bit:

代码语言:javascript
复制
if (viewValue.match(/\s/)) {
  ngModel.$setValidity('whitespace', false);
  return undefined;
}

您正在将有效性设置为false并返回undefined

您可以通过始终返回viewValue来保持模型的更新,即使它的值没有得到验证:

代码语言:javascript
复制
if (viewValue.match(/\s/)) 
  ngModel.$setValidity('whitespace', false);
else 
  ngModel.$setValidity('whitespace', true);

// Return viewvalue regardless of whether it validates or not
return viewValue;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24060325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档