我想在使用AngularJS的頁面上呈現驗證摘要。這是我到目前爲止:AngularJS中的表單驗證總結,每個字段都有自定義消息
<div ng-app>
<div ng-controller="ctrl">
<form name="userForm">
<fieldset>
<legend>User Info</legend>
<p><label>Name: <input type="text" required ng-maxlength="15" name="name" ng-model="name" /></label></p>
<p><label>Age: <input type="number" required name="age" ng-model="age" /></label></p>
<p><label>Favorite Color: <input type="text" required name="favColor" ng-model="favColor" /></label></p>
<p><input type="button" value="Submit" ng-click="submitForm()" /></p>
</fieldset>
</form>
<div id="validationSummary" ng-show="hasValidationErrors()">
<ul>
<li ng-repeat="error in validationErrors">{{ error }}</li>
</ul>
</div>
</div>
</div>
在我的控制器中,我創建了一個包含所有錯誤的數組。
function ctrl($scope) {
$scope.hasValidationErrors = function() {
return $scope.validationErrors && $scope.validationErrors.length > 0;
};
$scope.submitForm = function() {
$scope.validationErrors = [];
for (var property in $scope.userForm) {
if ($scope.userForm.hasOwnProperty(property) && $scope.userForm[property].$invalid) {
$scope.validationErrors.push($scope.userForm[property].$name);
}
}
}
}
我弄不清楚的是:我怎麼能得到更多的只是每個領域的名稱是無效的?我注意到每個字段上還有一個$error
屬性。輸出這個不是$name
給了我下面的:
{"required":true,"maxlength":false}
{"required":true,"number":false}
{"required":true}
這樣我就可以得到字段名,我可以描述什麼是錯與特定領域的對象。我怎樣才能定義一個錯誤信息,這樣如果一個字段是必需的,它會輸出「{name}是必需的」?看起來這可能是輸入元素本身的數據屬性,儘管我不知道如何訪問該屬性。
當然,我也有可能讓自己的事情變得完全困難。留在「AngularJS」世界中有沒有更好的方法來處理這個問題?
這是我一直在努力的jsFiddle的鏈接。
這項工作沒有內置的角度服務。您可以使用模板或編程方式在可能注入$ interpolate服務的專用服務中構建句子。 – lib3d
@ lib3d - 感謝您確認不存在內置的角度服務。我找不到一個,但聽到我不忽略一些明顯的事情讓人放心。我覺得我已經接近迄今爲止了,如果只有我可以有'data-required-message ='blah blah'',然後執行像'$ scope.userForm [property] .getAttribute('data-所需的消息')'。該部分可能如何工作?我如何從控制器的for循環中訪問元素?我應該使用數據屬性還是某種自定義指令或其他類型? –