0
我有以下AngularJS代碼。當我按提交按鈕時,它應該檢查輸入字段是否爲空。提交按鈕廣播指令成功捕獲的自定義事件。但是當字段爲空時它不起作用。它到達ctrl。$ parsers.unshift當我開始輸入時,我的字段變成了form.name。$ invalid === true。它似乎以相反的方式工作。指令驗證器不捕獲空字段,但填充字段
define(['angular'], function (angular) {
"use strict";
var requiredValidator = angular.module('RequiredValidator', []);
requiredValidator.directive('validateRequired', function() {
var KEY_ERROR = "required";
return {
scope: {
validateRequired: '=validateRequired'
},
require: 'ngModel',
link: function (scope, elem, attr, ctrl) {
function validate(value) {
var valid = !value || value === '' || value === null;
ctrl.$setValidity(KEY_ERROR, valid);
return value;
}
scope.$on('validateEvent', function (event, data) {
if (scope.validateRequired.$submitted) {
console.log("Reachable block when submitted");
ctrl.$parsers.unshift(function (value) {
console.log("Unreachable when input is empty");
return validate(value);
});
ctrl.$formatters.unshift(function (value) {
return validate(value);
});
}
});
}
};
});
return requiredValidator;
});
表單域片段:
<div>
<input type="text" name="name"
data-ng-class="{ error : theForm.name.$invalid}"
data-ng-model="customer.name"
data-validate-required="theForm">
<span data-ng-show="theForm.name.$invalid" class="error">{{getInputErrorMessage(theForm.name.$error)}}</span>
</div>
我的回答有用嗎? – LordTribual
它沒有回答我的問題。我被要求使用指令。雖然我知道如何更明智地使用$ error對象,比如形式$ error.required來區分不同的錯誤。 – inzzz
這可以很容易地移植到控制器,所以你不需要使用'$ parsers'等。 – LordTribual