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>