我有一个角度应用程序链接到Rails后端。 我想要的是用Angular处理Rails验证错误。
基于不同的教程,我这样做了:
edit.html
<div id="Wrapper" ng-controller="EditCtrl"
<div class="row margin-top-100">
<form name="form">
<div>
<!--- FIELD -->
<input class="field" type="text" ng-blur="update()" ng-model="current.title" name="title">
</div>
</form>
</div>
</div>
edit.js
.controller('EditCtrl',
function($scope, $rootScope, $state, $stateParams, $http, CurrentSpot, $filter, Notification, $modal,$compile, $timeout){
$scope.update = function() {
$http.put('/c/'+$scope.current.id.$oid, {c: $scope.current})
.then(function(success) {
$scope.current = success.data;
Notification.success("Great !")
}, function(error) {
console.log(error)
form.title.$setValidity('server', false);
console.log("FORM", form.title)
})
}
})
当Rails拒绝更新时,在控制台中会产生此错误form.title.$setValidity is not a function
。
可能还有一个信息:console.log("FORM", form)
返回:
<input class="field ng-pristine ng-untouched ng-valid ng-not-empty" type="text" ng-blur="update()" ng-model="current.title" name="title" >
但视图中的{{form.title}}
会返回:
{
"$viewValue":"Cc",
"$modelValue":"Cc",
"$validators":{
},
"$asyncValidators":{
},
"$parsers":[
],
"$formatters":[
null
],
"$viewChangeListeners":[
],
"$untouched":true,
"$touched":false,
"$pristine":true,
"$dirty":false,
"$valid":true,
"$invalid":false,
"$error":{
},
"$name":"title",
"$options":null
}
经过几个小时的阅读教程和文档后,我无法找到问题的来源。 感谢
答案 0 :(得分:0)
当您将函数调用为form.title.$setValidity('server', false);
时,form
将返回DOM对象,而不是具有$
的Angular对象 - 命名方法。
Angular在$scope
中为命名表单创建一个对象。
检查JSFiddle并查看浏览器控制台。