我目前正在处理自定义验证指令。它在Firefox上运行平稳,但后来我决定在Chrome和IE上测试它,并想知道为什么它不能在其中任何一个上运行。AngularJS:在Firefox和Chrome中有效的行为
添加一些调试输出后,我注意到一个奇怪的行为。
当选择和不选择在Firefox的复选框我获得以下的输出:
Object { $viewValue=true, $modelValue=true, $parsers=[2], mehr...} valid: true Object { $viewValue=false, $modelValue=false, $parsers=[2], mehr...} valid: false
在Chrome,另一方面我获得以下的输出:
Constructor {$viewValue: undefined, $modelValue: false, $parsers: Array[2], $formatters: Array[2], $viewChangeListeners: Array[0]…} valid: false Constructor {$viewValue: true, $modelValue: true, $parsers: Array[2], $formatters: Array[2], $viewChangeListeners: Array[0]…} valid: true
的$ viewValue是在第一次调用不确定的。然后,由于某种原因,它的行为就好像倒置一样。
有谁知道这种行为的原因和可能的解决方案吗?
的JavaScript:
angular.module("gewinnspielApp").directive("customValidity", function() {
return {
restrict: "A",
scope: {
customText: "@customValidity",
},
require: "?ngModel",
link: function(scope, element, attrs, ngModel) {
element[0].setCustomValidity(scope.customText);
element.bind("change", function() {
console.log(ngModel);
console.log("valid: " + ngModel.$valid);
element[0].setCustomValidity((ngModel.$valid ? "" : scope.customText));
});
}
}
});
HTML:
<td style="border:none; padding-right: 4px; width: 10px;">
<input id="tnc" name="tnc" type="checkbox" data-ng-model="formData.tnc" required data-ng-class="{'ng-dirty': submitted, 'ng-pristine': !submitted}" data-custom-validity="Bitte akzeptieren Sie die Nutzungsbedingungen.">
</td>
编辑: 看起来像模型更新和变化听众的问题。当我在HTML页面中添加{{ myForm.tnc.$valid }}
时,该值与预期结果相匹配。
你是否在某处初始化'$ scope.tnc'?如果不是,它可能确实是未定义的。 – kasoban 2014-10-07 09:24:16