使用ng-messages和ui-mask时遇到了一个棘手的问题。乍看之下两者都工作正常,当我第一次检查字段时它会显示消息,但是在我更正问题然后将其更改为另一个错误模式后,它将显示该字段无效,但不会显示消息。
<md-input-container md-no-float class="md-block" flex-gt-sm>
<label>Mobile*</label>
<input name="cel" ng-model="newUser.mobile" type="tel" ui-mask="(99) ?99999-9999" ui-mask-placeholder pattern="\([0-9]{2}\) [0-9]{4,6}-[0-9]{3,4}$" required md-maxlength="15" ui-options="{clearOnBlur: false}">
<div ng-messages="userForm.cel.$error" role="alert" multiple>
<div ng-message="required" class="my-message">Required Field</div>
<div ng-message="pattern" class="my-message">Invalid mobile format</div>
</div>
</md-input-container>
只是澄清一下情景:
1-我将手机输入字段留空 2-它显示预期的消息+将字段保留为红色(form.error打开)不允许提交 3-我将输入字段更改为有效格式 4-消息+错误消失 5-我再次将输入字段更改为空白 6-它将字段保留为红色(form.error已打开),但消息不会出现
我正在使用最新版本的ui-mask,ng-message被包含在angular-material(v1.0.9)中
有什么想法吗?
编辑:经过进一步调查,我意识到它与ui-mask无关,它似乎只是一个问题。 myForm.name。$ error被触发为'required'但div: <div ng-message="required" class="my-message">Required Field</div>
不会表现出来。
答案 0 :(得分:1)
我在这里找到了解决方案: angular ng-messages only showing when $touched is true
下面的代码对我的问题起作用
<md-input-container md-no-float class="md-block" flex-gt-sm>
<label>Mobile*</label>
<input name="cel" ng-model="newUser.mobile" type="tel" ui-mask="(99) ?99999-9999" ui-mask-placeholder pattern="\([0-9]{2}\) [0-9]{4,6}-[0-9]{3,4}$" required md-maxlength="15" ui-options="{clearOnBlur: false}">
<div ng-messages="userForm.cel.$error" role="alert" ng-show="userForm.cel.$touched" multiple>
<div ng-message="required" class="my-message">Required Field</div>
<div ng-message="pattern" class="my-message">Invalid mobile format</div>
</div>
</md-input-container>