Angularjs 验证表单中的自定义指令

Angularjs 验证表单中的自定义指令,angularjs,forms,validation,angularjs-directive,Angularjs,Forms,Validation,Angularjs Directive,我有一个表单,其中包含我想要验证的自定义指令。如果范围不是一个孤立的范围,我可以这样做,但是如果我们有一个孤立的范围案例,如何继续?例如,表单包含两个字段:名字和姓氏。名字直接在表单上,但姓氏在指令中。当我点击“保存”时,只有名字得到验证。有人能指出我遗漏了什么吗?代码有点像这样: 主要形式: <form class=" form form-group" name="personForm" ng-submit="saveInfo(personForm.$valid, '#/success'

我有一个表单,其中包含我想要验证的自定义指令。如果范围不是一个孤立的范围,我可以这样做,但是如果我们有一个孤立的范围案例,如何继续?例如,表单包含两个字段:名字和姓氏。名字直接在表单上,但姓氏在指令中。当我点击“保存”时,只有名字得到验证。有人能指出我遗漏了什么吗?代码有点像这样:

主要形式:

<form class=" form form-group" name="personForm" ng-submit="saveInfo(personForm.$valid, '#/success')" novalidate>
<label for="fname"><strong>First Name:</strong></label>
<input type="text" 
             name="fname"
             class="form-control"
             ng-model="person.firstname" 
             ng-maxlength=10 
             ng-minlength=3
             ng-required="true">
<div class="error-message" ng-messages="personForm.fname.$error" data-ng-if="interacted(personForm.fname)">
    <div ng-message="required">This is a required field</div>
    <div ng-message="maxlength">max length should be 10</div>
    <div ng-message="minlength">min length should be 3</div>
</div>

<last-name ng-model="person"></last-name>
<br/>
<button class="btn btn-primary" type="submit">Save</button>

我解决了我的问题。这本身就是一个“穷人的解决方案”,所以我恳求阅读这篇文章的专家们给我一个更好的建议

我的问题是“如果它的父表单已经提交,该指令如何知道”(不共享范围)。我的答案是向指示表单提交的指令发送另一个属性(作用域:{formSubmitted:'='})

}))

因此,该指令看起来有点愚蠢,但确实有效

<last-name ng-model="person.lastname" form-submitted="submitted"></last-name>

…而“提交”是用来检测是否按下提交按钮的东西


因此,有了这一点,再加上其他关于堆栈溢出的帖子(ng表单:将元素包含在指令中),我就能够让它工作了。同样的。

我解决了我的问题。这本身就是一个“穷人的解决方案”,所以我恳请阅读这篇帖子的专家给我建议一个更好的方法

我的问题是“如果它的父表单已经提交,该指令如何知道”(不共享作用域)。我的答案是向指示表单提交的指令发送另一个属性(作用域:{formSubmitted:'='})

}))

因此,该指令看起来有点愚蠢,但确实有效

<last-name ng-model="person.lastname" form-submitted="submitted"></last-name>

…而“提交”是用来检测是否按下提交按钮的东西

因此,有了这一点,再加上其他关于堆栈溢出的帖子(ng表单:将元素包含在指令中)的帮助,我能够让它正常工作

app.directive('lastName', function() {
return {
    restrict: 'E',
    scope: {
        formSubmitted: '='
    },
    require:'ngModel',
    templateUrl: './last-name.html',
    link: function(scope, element, attrs, controllers) {

        scope.$watch('lastname', function() {
            controllers.$setViewValue(scope.lastname);
        });
    }
};
<last-name ng-model="person.lastname" form-submitted="submitted"></last-name>