我想要一个带有md-select的空白选项,并且我希望它在需要时不进行验证

时间:2018-10-05 09:57:09

标签: angularjs angularjs-material md-select

我正在使用Angular Material和md-select,我想做一个空白选项,以便在选择它时,选择中没有任何值。如果我需要它,那么我希望此选项在检查时返回false。

这是一个演示:https://plnkr.co/edit/FZ8xt5ZCRJY3fFMh3fFU?p=preview

<html>
  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</ript>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.2.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js" data-semver="1.2.19"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <form>
      <select ng-model="selectedValue2" required >
        <option ng-repeat="option in options['id'] | orderBy: 'id'" ng-value="option.value">{{option.name}}</option>
      </select>
      <button type="submit">Submit</button>
    </form>
  </body>  
</html>

我的情况更加复杂,所以我不需要解决方法,我只想一种选择空白选项时使所需工作正常进行的方法。

2 个答案:

答案 0 :(得分:1)

询问后问题已更改。最初与md-select无关,因此可能会有更好的方法。您需要做的就是将此选项添加到您的md-select

<md-option value=""></md-option>

然后从对象中删除blank条目。

HTML

<select ng-model="selectedValue2" required >
    <option value=""></option>
    <option ng-repeat="option in options['id'] | orderBy: 'id'" ng-value="option.value">{{option.name}}</option>
</select>

JavaScript

$scope.options = {id : [
    {name : 'World', value : 'World', id:3},
    {name : 'qweqwe', value : 'qweqwe', id:1},
    {name : 'rwerasdf', value : 'rwerasdf', id:2}
]}

如果您使用常规的select就足够了,但是md-select认为空值可以满足required属性,因此您需要做更多的工作。

根据您的选择,添加功能checkNull以运行onchange

 ng-change="checkNull()"

然后将其添加到您的范围:

$scope.checkNull = function(){
    if(typeof $scope.selectedValue2 === "undefined"){
        $scope.myform.myselect.$setValidity("required", false);
    }
};

Working Fiddle

答案 1 :(得分:0)

尝试添加以下代码段:

<md-option ng-value disabled>Choose One</md-option>