【问题标题】:how to do validation in md-autocomplete+md-chip如何在 md-autocomplete+md-chip 中进行验证
【发布时间】:2017-11-22 21:50:18
【问题描述】:

我需要像自动完成一样进行验证

  • 最小长度
  • 最大长度
  • 芯片总数

我力求找到一种正确的方法来验证所有这些验证 我的 HTML 是

<md-chips md-on-add="selectedGroups.add($chip)" ng-focus="userTag"
                    ng-model="selectedGroups" is="tagSelect" md-autocomplete-snap
                    md-require-match="true" md-max-chips="3" maxlength="10">
                <md-autocomplete 
                    md-search-text="searchText"
                    md-items="item in queryGroups(searchText)" 
                    md-item-text="item"
                    md-autoselect="true" md-select-on-match="true"
                    md-no-cache="true"
                    md-require-match="true"
                    md-input-name="autocompleteField"
                    md-input-minlength="2"
                    md-input-maxlength="5"
                    >
                     <span
                    md-highlight-text="searchText">{{item}}</span>
                    <div ng-messages="searchForm.autocompleteField.$error" ng-if="searchForm.autocompleteField.$touched">
                <div  ng-message="required">You <b>must</b> have a favorite state.</div>
                <div  ng-message="minlength">Your entry is not long enough.</div>
                <div  ng-message="maxlength">Your entry is too long.</div>
              </div>
                     </md-autocomplete> 
                    <md-chip-template
                    ng-maxlength="2" md-max-chips="5" required> <span>{{$chip}}</span>
                </md-chip-template> </md-chips>

我的js是

   var allGroups = ['one','two','three'  ];
$scope.queryGroups = function(search) {

    var firstPass = $filter('filter')($scope.allGroups, search);
       return firstPass.filter(function(item) {
        return $scope.selectedGroups.indexOf(item) === -1;
        console.log(item)
    });

};

请帮帮我

【问题讨论】:

    标签: angularjs validation angular-material md-autocomplete md-chip


    【解决方案1】:
    • 芯片总数

      对于芯片的总数,在你的 md-chips 指令中使用 md-max-chips(这是你的最大数量 +1 假设我想要 5 个芯片然后我使用 md-max-chips="6")它会如果达到最大值,则禁用输入。如果你想要一些错误输出,你可以在你的芯片指令下创建一个跨度,在你的模型的最大长度上使用 ng-if (ng-if="model.length >= 6)

    • 输入的最小/最大长度

      这是一个小技巧,因为您想使用自动完成,但 md-maxlength 不存在。因此,您可以做的只是在文本更改上对字符串进行子串化,使其永远不能超过 5 个字符 (md-search-text-change="text_model = text_model.substring(0,5)")

      <md-chips
       name="label"
       ng-model="selectedGroups"
       md-max-chips="3"
       md-removable="true"
       md-on-add="someCheckOnAdd($chip)"
       md-on-remove="someCheckOnDelete($chip)">
         <md-autocomplete 
           md-search-text="text_model"
           ng-disabled="selectedGroups.length >= 3"
           md-items="item in queryGroups(text_model)"
           md-item-text="item"
           md-autoselect="true"
           md-search-text-change="text_model = text_model.substring(0,5)"
           md-select-on-match="true"
           md-no-cache="false"
           md-require-match="true">
             <span md-highlight-text="searchText">{{item}}</span>
         </md-autocomplete>
              <md-chip-template >
                  <strong style="padding-right: 10px;">{{$chip}}</strong>
              </md-chip-template>
      </md-chips>
      
      <span ng-if="model.length > 7" class="alert-message-edition-match">Max chips number reached</span>
      

    这是一个有效的fiddle,它适合您想要做的事情。

    【讨论】:

    • 我正在实现带有 md-autocomplete 的 ng-chip,我正在使用下降的示例中包含输入字段,但我不知道如何在现有系统中实现它。我从一个例子中得到这个link
    • 它解决了你的问题@PaulCheriyan 吗?或者你需要更多?
    • 抱歉@guillaume,我需要更多解释来使用 md-autocomplete 在 ng-chip 中实现验证
    • 您需要实施什么,什么不起作用?您给我的 JS 链接是您当前的代码吗?如果是这样,一旦你告诉我你需要什么,我会在那里修复它:)
    • 这里是我添加了上述解决方案Solution-in-jsfidle的jsfidle链接。但验证不起作用。可以告诉我为什么它不工作
    猜你喜欢
    • 2017-08-11
    • 2017-08-24
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多