使用简单的验证消息指令的奇怪行为

时间:2015-07-24 17:46:29

标签: javascript angularjs angularjs-directive

我有以下指令:

App.directive("validateMsgFor", function(){
    return{
        templateUrl : "view/templates/validateMsgFor.html",
        restrict:  "E",
        scope: {
            field : "="
        }
    }
});

它使用的模板是:

<div ng-if="field.$dirty" ng-messages="field.$error">
    <div ng-messages-include="view/messages.html"></div>
</div>

反过来使用以下html:

<div class="messages">
    <div ng-message="required">Campo Obrigatório</div>
    <div ng-message="minlength">Necessário mais caracteres</div>
    <div ng-message="maxlength">Necessário menos caracteres</div>
    <div ng-message="email">E-mail inválido</div>
    <div ng-message="compareTo">Deve corresponder com valor digitado anteriormente</div>
</div>

所有这些使用如下:

<label>Departamento</label> 
<select id="departamentos" ng-model="model.curso.departamento" name="departamento" ng-options="d.nome for d in departamentos track by d.id" ng-required="true">
    <option value="">Selecione um Departamento</option>
</select>
<validate-msg-for field="mainForm.departamento"></validate-msg-for>

它以我期望的方式工作,即在出现验证错误时以及当字段处于状态&#34;脏&#34;时显示消息。 但是当我点击另一个链接时,也就是说,当我转到另一个页面时,标签会冻结,开始大量使用处理器,指示某种无限循环或其他东西,然后分页。我意识到只有当消息出现在页面上时才会发生这种情况,当我发表评论时,问题就不会发生。

我的问题是要知道我做错了什么,这不是我应该使用的方式吗? 如果有人有任何建议吗?

我使用的角度,角度路径和角度消息版本是1.4.3。

谢谢。

1 个答案:

答案 0 :(得分:1)

好吧,我做了以下改动:

<div ng-if="field.$dirty" ng-messages="field.$error" class="messages">
    <div ng-message="required">Campo Obrigatório</div>
    <div ng-message="minlength">Necessário mais caracteres</div>
    <div ng-message="maxlength">Necessário menos caracteres</div>
    <div ng-message="email">E-mail inválido</div>
    <div ng-message="compareTo">Deve corresponder com valor digitado anteriormente</div>
    <!-- <div ng-messages-include="view/messages.html"></div> -->
</div>

现在它可以正常工作而不会崩溃。

然而,仍然不知道为什么会发生错误。