首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ng-messages在angularjs material md-input-container中显示服务器端验证消息

使用ng-messages在angularjs material md-input-container中显示服务器端验证消息
EN

Stack Overflow用户
提问于 2018-06-26 23:41:52
回答 1查看 234关注 0票数 0

我有一个表单,其中有一些输入在md-input-container中。每个输入都有一些带有ng-messages指令的验证消息:

代码语言:javascript
复制
<form name="ctrl.myForm" layout="column" ng-submit="addUser(model)">

    <input hide type="submit" />
    <div layout="column" layout-padding>

        <md-input-container> 
            <label translate>Username</label>
            <input name="username" ng-model="model.username" type="text" required>
            <div ng-messages="ctrl.myForm.username.$error">
                <div ng-message="required" translate>This field is required.</div>
                <div ng-message="unique" translate>Username is used before.</div>
            </div>
        </md-input-container>

        <md-input-container> 
            <label translate>Email</label>
            <input name="email" ng-model="model.email" required>
            <div ng-messages="ctrl.myForm.email.$error">
                <div ng-message="required" translate>This field is required.</div>
                <div ng-message="email" translate>Email is not valid.</div>
            </div>
        </md-input-container>

    </div>

    <div layout="row">
        <span flex></span>
        <md-button 
            class="md-raised"
            ng-click="cancel()">
            <wb-icon>close</wb-icon>
            <span translate>Cancel</span>
        </md-button>
        <md-button 
            class="md-raised"
            ng-click="addUser(model)">
            <wb-icon>done</wb-icon>
            <span translate>Add</span>
        </md-button>
    </div>

</form>

在我的控制器中,我有一个名为addUser(模型)的函数,它将给定的数据发送到服务器并接收一些验证码。我在$error对象中设置了适当的键,但没有显示相关消息。如果从服务器得到错误,我将密钥设置如下:

代码语言:javascript
复制
function addUser(model){
    $myService.newUser(model)//
    .then(function(user) {
        // user is created successfully.
    }, function(error) {
        ctrl.myForm.$invalid = true;
        ctrl.myForm.username.$error['unique'] = true;
        ctrl.myForm.email.$error['email'] = true;
    });
}

我希望当我将键设置为true时,相关消息会出现在表单中,但消息不会显示。此时,如果我更改某个字段的值,则会显示该字段的相关消息!我找不到问题。

EN

回答 1

Stack Overflow用户

发布于 2018-06-27 19:06:30

阅读这里的https://docs.angularjs.org/guide/forms关于$asyncValidators,也有一些例子。(ctrl.$asyncValidators.username=...等)

简而言之:

Angularjs内置验证需要您编写和添加验证器。您不应该手动控制$invalid, $error字段(这就是它们具有$前缀的原因)。Angularjs材料也遵循这种方法。

另外,像ctrl.myForm.$invalid = true;这样的代码行不能一致工作的原因非常简单-- angularjs下一次验证运行时会把它设置回false

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51046773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档