Angular - 无法$ setValidity(不是函数)

时间:2016-09-15 14:00:51

标签: angularjs

我有一个角度应用程序链接到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
}

经过几个小时的阅读教程和文档后,我无法找到问题的来源。 感谢

1 个答案:

答案 0 :(得分:0)

当您将函数调用为form.title.$setValidity('server', false);时,form将返回DOM对象,而不是具有$的Angular对象 - 命名方法。 Angular在$scope中为命名表单创建一个对象。 检查JSFiddle并查看浏览器控制台。