【问题标题】:Form validation with error message using angular ngMessage使用 Angular ngMessage 进行带有错误消息的表单验证
【发布时间】:2015-11-06 17:40:12
【问题描述】:

我正在使用带有一些多选字段的ui-select,我想像这样实现客户端<form> 验证:

<form name="newProjectForm" ng-submit="p.addProject()" class="inputsContainer" novalidate> 
  <div class="form-group" ng-class="{ 'has-error' : newProjectForm.frameworks.$invalid && 
                                                    !newProjectForm.frameworks.$pristine }">
    <label>Frameworks</label>
  <ui-select name="frameworks" multiple ng-model="p.newProject.frameworks" sortable="true" 
             close-on-select="false" required>
    <ui-select-match placeholder="Select framework...">{{$item.name}}</ui-select-match>
    <ui-select-choices repeat="framework.id as framework in p.frameworksList
                               | propsFilter: {name: $select.search, language: $select.search}">
      <div ng-bind-html="framework.name | highlight: $select.search"></div>
      <small>
        language : <span ng-bind-html="''+framework.language | highlight: $select.search"></span>
      </small>
    </ui-select-choices>
  </ui-select>
    <div ng-messages="newProjectForm.frameworks.$error">
      <p ng-messages="required">THIS IS REQUIRED</p>
    </div>
    <p ng-show="newProjectForm.frameworks.$invalid && !newProjectForm.frameworks.$pristine" 
       class="help-block">Project frameworks is required.</p>
  </div>
<!-- ... -->

所以,问题是我尝试的条件不起作用:

newProjectForm.frameworks.$invalid &amp;&amp; !newProjectForm.frameworks.$pristine"&gt; 似乎总是假的。

&lt;div ng-messages="newProjectForm.frameworks.$error"&gt; 似乎也不起作用。

但是,我改用这条线进行了测试:

&lt;div class="form-group" ng-class="{ 'has-error' : true }"&gt;

而且它起作用了,所以我猜这是不起作用的条件。

【问题讨论】:

    标签: javascript angularjs ui-select2 ui-select ng-messages


    【解决方案1】:

    好的,看来ui-selectrequired 不能一起工作。

    所以如果你遇到同样的问题,你可以使用自定义指令而不是 required :

    app.directive('uiSelectRequired', function() {
      return {
        require: 'ngModel',
        link: function(scope, elm, attrs, ctrl) {
          ctrl.$validators.uiSelectRequired = function(modelValue, viewValue) {
            if (modelValue && modelValue.length > 0)
              return true;
            return false;
          };
        }
      };
    });
    

    那么您只需在 HTML 视图中将 required 替换为 ui-select-required

    【讨论】:

    • 这对我不起作用。 modelValue 和 viewValue 在其包含函数执行时未定义
    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2018-02-22
    • 2012-06-04
    相关资源
    最近更新 更多