Angular Material md-select 未显示错误
Error not showing for Angular Material md-select
我正在尝试实现一种表单,在该表单中,只有在单击提交按钮后才会显示错误消息。对于输入,这似乎是开箱即用的,但是对于 md-select 来说,它的行为并不像预期的那样。
当我提交表单(没有填写任何内容)时,我收到了输入错误消息,但没有收到 md-select.
http://plnkr.co/edit/BDB0NVccWckqgnSYD9Qt?p=preview
表格如下:
<form name="userForm" novalidate ng-submit="test()">
<md-input-container>
<label>Last Name</label>
<input name="lastName" ng-model="lastName" required>
<div ng-messages="userForm.lastName.$error">
<div ng-message='required'>This is required!</div>
</div>
</md-input-container>
<md-input-container class="md-block">
<label>Favorite Number</label>
<md-select name="favoriteNumber" ng-model="myNumber" required>
<md-option value="1">One</md-option>
<md-option value="2">Two</md-option>
</md-select>
<div ng-messages="userForm.favoriteNumber.$error">
<div ng-message='required'>This is required</div>
</div>
</md-input-container>
<div>name = {{lastName}}</div>
<div>userForm.lastName.$error = {{userForm.lastName.$error}}</div>
<div>number = {{myNumber}}</div>
<div>userForm.favoriteNumber.$error = {{userForm.favoriteNumber.$error}} </div>
<md-button type="submit" class="md-raised md-primary">Save</md-button>
</form>
请注意,这已从 Angular Material 1.1.1
开始修复
这里有一个问题github issue
基本上,当 md-select
变得模糊时,消息才会出现
也许这会有所帮助:
<div ng-messages="userForm.favoriteNumber.$error" ng-show="userForm.favoriteNumber.$invalid">
这是 @stalin 提到的已知错误。您可以通过 input type="hidden"
之类的方法来解决它,它负责验证而不是您的 md-select
或类似的方法。
在某些情况下可以使用 select 默认值。 HTML5 select/option 具有 selected 属性。如果它不起作用,您也可以尝试在您的一个选项上设置 value="" 作为 hack。
下面的代码运行完美..
<md-input-container flex-gt-xs class="form-group">
<label translate>Types</label>
<md-select name="type" ng-required="true" ng-model="vm.model.type">
<md-option>Number One</md-option>
<md-option>Number Two</md-option>
</md-select>
<div ng-messages="editOrganisationForm.type.$error"
ng-show="editOrganisationForm.$submitted || editOrganisationForm.type.$touched || editOrganisationForm.type.$dirty ">
<div ng-message-exp="['required']" ng-hide="editOrganisationForm.type.$valid">
<span translate>Please select Type</span>
</div>
</div>
</md-input-container>`
我遇到了同样的问题,并按如下方式修复了它
在我的表单标签中
<form name="userForm" method="post" action="javascript:;">
在我的 md-select 盒子里
<md-select name="favoriteNumber" ng-model="myNumber" required>
在我的提交按钮中
<md-button class="md-raised md-primary" ng-click="saveMe()">Save</md-button>
在我的控制器中
$scope.saveMe = function() {
if(!$scope.userForm.$valid) {
$scope.userForm.$setSubmitted();
return;
}
alert("I am validated");
};
最重要的是我使用的是angular material 1.1.4版本
工作不及格
我正在使用 angular 4,我尝试在我的组件中这样做:
this.formGroup.controls.selectField.updateValueAndValidity();
每当我尝试提交表单时,它都会显示我的错误消息。
虽然我不确定它为什么有效 =)
我正在尝试实现一种表单,在该表单中,只有在单击提交按钮后才会显示错误消息。对于输入,这似乎是开箱即用的,但是对于 md-select 来说,它的行为并不像预期的那样。
当我提交表单(没有填写任何内容)时,我收到了输入错误消息,但没有收到 md-select.
http://plnkr.co/edit/BDB0NVccWckqgnSYD9Qt?p=preview
表格如下:
<form name="userForm" novalidate ng-submit="test()">
<md-input-container>
<label>Last Name</label>
<input name="lastName" ng-model="lastName" required>
<div ng-messages="userForm.lastName.$error">
<div ng-message='required'>This is required!</div>
</div>
</md-input-container>
<md-input-container class="md-block">
<label>Favorite Number</label>
<md-select name="favoriteNumber" ng-model="myNumber" required>
<md-option value="1">One</md-option>
<md-option value="2">Two</md-option>
</md-select>
<div ng-messages="userForm.favoriteNumber.$error">
<div ng-message='required'>This is required</div>
</div>
</md-input-container>
<div>name = {{lastName}}</div>
<div>userForm.lastName.$error = {{userForm.lastName.$error}}</div>
<div>number = {{myNumber}}</div>
<div>userForm.favoriteNumber.$error = {{userForm.favoriteNumber.$error}} </div>
<md-button type="submit" class="md-raised md-primary">Save</md-button>
</form>
请注意,这已从 Angular Material 1.1.1
开始修复这里有一个问题github issue
基本上,当 md-select
变得模糊时,消息才会出现
也许这会有所帮助:
<div ng-messages="userForm.favoriteNumber.$error" ng-show="userForm.favoriteNumber.$invalid">
这是 @stalin 提到的已知错误。您可以通过 input type="hidden"
之类的方法来解决它,它负责验证而不是您的 md-select
或类似的方法。
在某些情况下可以使用 select 默认值。 HTML5 select/option 具有 selected 属性。如果它不起作用,您也可以尝试在您的一个选项上设置 value="" 作为 hack。
下面的代码运行完美..
<md-input-container flex-gt-xs class="form-group">
<label translate>Types</label>
<md-select name="type" ng-required="true" ng-model="vm.model.type">
<md-option>Number One</md-option>
<md-option>Number Two</md-option>
</md-select>
<div ng-messages="editOrganisationForm.type.$error"
ng-show="editOrganisationForm.$submitted || editOrganisationForm.type.$touched || editOrganisationForm.type.$dirty ">
<div ng-message-exp="['required']" ng-hide="editOrganisationForm.type.$valid">
<span translate>Please select Type</span>
</div>
</div>
</md-input-container>`
我遇到了同样的问题,并按如下方式修复了它
在我的表单标签中
<form name="userForm" method="post" action="javascript:;">
在我的 md-select 盒子里
<md-select name="favoriteNumber" ng-model="myNumber" required>
在我的提交按钮中
<md-button class="md-raised md-primary" ng-click="saveMe()">Save</md-button>
在我的控制器中
$scope.saveMe = function() {
if(!$scope.userForm.$valid) {
$scope.userForm.$setSubmitted();
return;
}
alert("I am validated");
};
最重要的是我使用的是angular material 1.1.4版本
工作不及格
我正在使用 angular 4,我尝试在我的组件中这样做:
this.formGroup.controls.selectField.updateValueAndValidity();
每当我尝试提交表单时,它都会显示我的错误消息。
虽然我不确定它为什么有效 =)