Javascript 如果多个元素使用相同的自定义验证指令,如何验证表单?

Javascript 如果多个元素使用相同的自定义验证指令,如何验证表单?,javascript,html,angularjs,validation,angularjs-scope,Javascript,Html,Angularjs,Validation,Angularjs Scope,我已经用这种格式为日期编写了一个验证指令MM/YYYY,如果每页只有一个元素要验证,那么这个指令很有效,但是当我有多个元素时,我注意到验证是混合的,所以可能是一个范围误解 我的意思是,对于form.startDate元素,我得到了minDate的验证错误,而不是仅对form.endDate元素看到它 我的看法是: <form> <input id="start-date" type="text" validate-short-

我已经用这种格式为日期编写了一个验证指令
MM/YYYY
,如果每页只有一个元素要验证,那么这个指令很有效,但是当我有多个元素时,我注意到验证是混合的,所以可能是一个
范围
误解

我的意思是,对于
form.startDate
元素,我得到了
minDate
的验证错误,而不是仅对
form.endDate
元素看到它

我的看法是:

<form>
    <input id="start-date"
           type="text"
           validate-short-date
           data-max-date="{{endingDate | toDate:'MM/YYYY':'YYYYMM'}}"
           data-greater-date="{{nextMonth | toDate:'MM/YYYY':'YYYYMM'}}"
           name="startDate"
           data-ng-model="startingDate">

    <input id="end-date"
           type="text"
           validate-short-date
           data-min-date="{{thisMonth | toDate:'MM/YYYY':'YYYYMM'}}"
           name="endDate"
           data-ng-model="endingDate">
</form>

如何在同一视图中保留更多验证指令?

您的怀疑是正确的,这是一个范围问题。您希望在这些指令上有一个独立的作用域。查看有关此主题的详细信息。关于您的代码,请尝试以下更改

.directive('validateShortDate', ['moment', function(moment) {
    return {
        restrict: 'A',
        scope: {}, // -- isolate - not shared with parent scope
        require: 'ngModel',
        link: function(scope, element, attr, ngModel) {
        [...]
此外,如果希望将这些属性作为命名范围属性,本文还介绍了实现这一点的技术。这将减轻您当前在指令范围内将
scope[ngModel.$name]
转换为
scope.name
的工作量。这将被视为

scope: {
    'name': '='
    [...] // -- other attributes to be named on scope
}
还可以在博客中探索如何使用
{{interpolated}}
字符和
=
在您的作用域上传递
{interpolated}
值。简单地说

  • @用于将字符串值传递到指令中
  • =用于创建传递到指令的对象的双向绑定
  • &允许将外部函数传递到指令并调用

你的怀疑是正确的,这是一个范围问题。您希望在这些指令上有一个独立的作用域。查看有关此主题的详细信息。关于您的代码,请尝试以下更改

.directive('validateShortDate', ['moment', function(moment) {
    return {
        restrict: 'A',
        scope: {}, // -- isolate - not shared with parent scope
        require: 'ngModel',
        link: function(scope, element, attr, ngModel) {
        [...]
此外,如果希望将这些属性作为命名范围属性,本文还介绍了实现这一点的技术。这将减轻您当前在指令范围内将
scope[ngModel.$name]
转换为
scope.name
的工作量。这将被视为

scope: {
    'name': '='
    [...] // -- other attributes to be named on scope
}
还可以在博客中探索如何使用
{{interpolated}}
字符和
=
在您的作用域上传递
{interpolated}
值。简单地说

  • @用于将字符串值传递到指令中
  • =用于创建传递到指令的对象的双向绑定
  • &允许将外部函数传递到指令并调用

嘿,你在这方面有什么进展吗?我的建议对你有帮助吗?…我还在想这是个问题还是我的建议对你有帮助。请回答嘿,你在这方面有什么进展吗?我的建议对你有帮助吗?…我还在想这是个问题还是我的建议对你有帮助。请回答