【问题标题】:ng- message is not displaying message properlyng-消息没有正确显示消息
【发布时间】:2016-07-25 06:49:33
【问题描述】:

我正在使用 Angular js 进行验证,并尝试通过 ng-message 指令显示错误消息。但我的问题是,在我的表单中,当我输入任何错误输入时,它第一次不显示消息,当我单击表单外的任何位置时,只显示消息。我还希望当错误被删除时,原始标签应该出现.但是这里一旦显示错误消息,标签就不会出现在我的表单中。我正在使用以下代码进行验证-

<div class="form-group" ng-class="{ 'has-error' : myForm.num.$invalid && (myForm.$submitted  || myForm.num.$touched ) || myForm.num.$error.minlength || myForm.num.$error.maxlength || myForm.num.$error.pattern}">

    <label for="Number" style="color:#767676" class=""
           ng-hide="myForm.num.$invalid && (myForm.$submitted  || myForm.num.$touched || myForm.num.$error.minlength || myForm.num.$error.pattern)">Number</label>

    <div ng-show="myForm.num.$touched " ng-messages="myForm.num.$error">
        <label class="error_message_text" ng-message="required">required field</label>
        <label class="error_message_text" ng-message="minlength">too short</label>
        <label class="error_message_text" ng-message="pattern">wrong pattern</label>
    </div>
    <br>
    <input type="text" numbers-only name="num" class="form-control" ng-class="" ng-minlength="7" ng-maxlength="9"
           ng-model="user.name" ng-pattern="/^\d{7}$|^\d{9}$/" required/>

</div>

我在这里创建了一个 plunker- https://plnkr.co/edit/tYDdIs8ZhrdjSko68Wkh?p=preview

谁能帮我验证我失踪的地方?

【问题讨论】:

  • 你检查我更新的答案和plnkr了吗?
  • @Aanchal 查看更新的 plunkr
  • @Aanchal 再次更新了我的答案...请检查一下。
  • 完成@Aanchal 看看我的小伙伴
  • @Aanchal,如果想在 Tab 键按下时触发事件,您应该编写自己的指令。 SO是编码问题的问答网站,而不是帮助论坛。你的问题太宽泛,无法回答。即使您没有正确提及您的要求..

标签: angularjs forms validation ng-messages


【解决方案1】:

同时使用dirty和error valid,

 <div ng-show="myForm.num.$invalid && myForm.$submitted" ng-messages="myForm.num.$error">

看到这个 plunker,但我已经删除了您在所需验证期间出现问题的号码验证代码 https://plnkr.co/edit/3m0zLJ2PhAruSFxStwmt?p=preview

更新的最终答案- https://plnkr.co/edit/v65oGQaZ64nU25EhX2nz?p=preview

【讨论】:

  • 但是我的标签消失了,当我从我的盒子里跳出来时。之后如果我在输入一些东西后删除了值,那么标签就不会出现。只要没有错误消息,标签出现需要什么条件? @新图
  • 您的号码验证存在问题,需要将其分开,当您在没有有效输入的情况下单击提交按钮时,此验证将起作用
  • 如果我提交表单,您的代码会显示错误消息。除了这个功能之外,我还想在开箱即用时显示错误消息。我的意思是在您的表单中,当我输入任何错误的值时,除非我提交,否则它不会显示消息。你可以添加任何条件,以便当我退出它时它也会显示错误消息@Shintu
  • @Shintu,您的代码按照我的要求运行良好。在这里,我做了一些小的编辑,因为框在错误消息中上下移动并编辑了错误类-plnkr.co/edit/v65oGQaZ64nU25EhX2nz?p=preview
  • @DownVoters 请在这里评论问题
【解决方案2】:

这是因为您已将ng-show="myForm.num.$touched " 添加到错误消息容器中。当您从输入字段中移除焦点时,$touched 将为真。这就是为什么您在单击外部后收到错误消息的原因。

【讨论】:

  • 很好,但是我应该给出什么条件,以便在删除错误时始终出现标签“数字”。目前,当我标记标签时不会出现@Shashank
  • 我不明白如果你不想在任何情况下隐藏标签,为什么你在那里添加ng-hide?有具体原因吗?
  • 我只想在出现错误消息时隐藏标签。那么我需要给出什么条件呢?
【解决方案3】:

Update 2 Demo

使用$dirty 而不是$touched。所以你的代码应该是这样的:

<div ng-show="myForm.num.$dirty " ng-messages="myForm.num.$error">

更新

Number 标签应如下所示:

数字

numbersOnly 指令中删除 if 条件。

.directive('numbersOnly', function () {
    return {
        require: 'ngModel',
        link: function (scope, element, attr, ngModelCtrl) {
            function fromUser(text) {

                    var transformedInput = text.replace(/[^0-9]/g, '');

                    if (transformedInput !== text) {
                        ngModelCtrl.$setViewValue(transformedInput);
                        ngModelCtrl.$render();
                    }
                    return transformedInput;  

            }            
            ngModelCtrl.$parsers.push(fromUser);
        }
    };

使用以下代码显示验证消息:

<div ng-show="myForm.num.$dirty || myForm.$submitted" ng-messages="myForm.num.$error">
            <label class="error_message_text" ng-message="required">required field</label>
             <label class="error_message_text" ng-message="minlength">too short</label>
             <label class="error_message_text" ng-message="pattern">wrong pattern</label>
</div>

【讨论】:

  • 错误现在很好,但是当我在出现错误后退出并再次输入正确的值时,原始标签没有出现,我的意思是“数字”一旦我退出盒子。它缺少什么条件?
  • 文本框为空时不显示“必填”消息。同样,一旦我提交表单,标签就会再次消失@Khalid
  • @Aanchal 更新了我的答案,请检查...还更新了 plnkr。希望这能解决您的问题。
  • 但是当我输入一些值并跳出时它没有显示错误消息。它仅在我提交表单时才起作用。除此之外,我希望它在我跳出时应该给出错误消息。 @Khalid
  • @Aanchal 你所说的“跳出”是什么意思?我看到它工作正常。我试图回答你的问题。我建议你看看How do I ask a good question?edit 你的问题。
猜你喜欢
  • 2016-11-20
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多