-1
我試圖通過使用自定義指令來實現異步驗證。AngularJS - 插入自定義指令後,表單變爲無效
這是指令
moduloArea.directive('uniqueName', function($http, $q) {
return {
require : 'ngModel',
link: function($scope, element, attrs, ngModel) {
ngModel.$asyncValidators.nombre = function(modelValue, viewValue) {
return $http.get('/checkUsernameAvailability/'+viewValue).then(
function(response) {
if (!response.data.validUsername) {
return $q.reject(response.data.errorMessage);
}
return true;
}
);
};
}
};
});
結果在控制檯
正如你可以看到當根用戶名輸入的回報的JSON對象,因爲此用戶名已經拿了。
但是,在插入僞指令unique-name時,HTML格式爲$ invalid。
<form name="registerUsernameForm" novalidate="novalidate">
<input type="text" name="username" data-ng-model="person.userName" data-unique-name="" required="required"/>
<span data-ng-show="registerUsernameForm.username.$error.uniqueName">This username is already taken.</span>
<button type="submit" data-ng-disabled="registerUsernameForm.$invalid || registerUsernameForm.$pending" data-ng-click="registerPerson(person)"> Save Person </button>
</form>
我使用的數據唯一的名稱=「」(=「」),因爲如果我不那麼thymeleaf生成以下錯誤:
Attribute name "data-unique-name" associated with an element type "input" must be followed by the ' = ' character.
你這是什麼認爲可能是錯誤的?
感謝的人,像我8.我真的有這種小白,我從失去你能解釋一下這個指令對我「功能解決(響應)」開始。 – wilson
已解決僅僅是清除代碼的名稱。你可以設置你想要的。 $ http promise基本上有2個回調。首先是成功,第二個可以看到一個錯誤。當休息API返回2XX狀態,這意味着它是成功的。 4XX是客戶端錯誤,5XX是服務器錯誤。即,如果名稱不存在,則可以拋出錯誤。這意味着驗證成功。 –