2016-08-09 20 views
0

我得到了我的角度形式所有设置和工作。这些值在调用对json请求的响应之后设置。该表单成功填充了json响应。之后,我想'重置'的形式,如$ scope.object。$ setPristine。但我得到一个错误:setPristine不是一个函数

$scope.object.$setPristine is not a function 

我使用角1.4.8

这里是我的HTML:

<div ng-app="myApp" ng-controller="formController" class="ng-scope"> 
    <form name="object" ng-submit="submit()" method="post" action="" novalidate="" class="ng-pristine ng-valid"> 
     <div class="form-group"> 
      <label class="control-label" for="object_name">Name</label> 
      <input type="text" id="object_name" name="object[name]" ng-model="object.name" class="form-control ng-pristine ng-valid ng-touched" value="Object 2c"> 
     </div> 
     <div class="form-group"> 
      <label class="control-label" for="object_elements">Elements</label> 
      <select id="object_elements" name="object[elements][]" ng-model="object.elements" ng-options="opt.id as opt.name for opt in options | orderBy: &quot;id&quot;" class="form-control ng-pristine ng-untouched ng-valid" multiple="multiple"></select></div> 
     <div class="form-group"> 
      <input ng-disabled="object.$pristine" class="btn btn-primary" value="Save" ng-click="submitForm()"> 
     </div> 
    </form> 
</div> 

这里是我的.js:

var app = angular.module('myApp', ["ngResource"]).controller('formController', function ($scope, $http, $location) { 

    var url = $location.absUrl() + '/json' 

    $http({ 
     method: 'GET', 
     url: url 
    }).then(function (response) { 
     $scope.status = response.status; 
     $scope.data = response.data; 
     $scope.object = response.data; 
     $scope.object.$setPristine(); 
     $('#modal-loading').modal('hide'); 

    }, function (response) { 
     $scope.data = response.data || "Request failed"; 
     $scope.status = response.status; 
     $('#modal-loading').modal('hide'); 
    }); 
}); 

回答

1

您覆盖$scope.object用JSON响应,当然它没有附带任何功能。

$scope.object = response.data; 
$scope.object.$setPristine(); 

这在功能上等同于:

$scope.object = {of_course: "this doesn't work"}; 
$scope.object.$setPristine(); 

你可能只需要改变你的ng-model s到引用$scope.data代替$scope.object

ng-model="data.name" 

并不能覆盖表单对象。

+0

谢谢。那就是诀窍。但为什么给我-1我的问题:这个问题不清楚?或者因为它很明显?对你而言,显而易见的事情对我来说并不明显,反之亦然......无论如何......我提出并检查了你的答案...... –

+0

你为什么认为我低估了你?我没有。 – dave

0

我的方法是......

<form name="newClntForm" id="newClnt" class="add(newClnt, newClntForm)"> 
<input type="text" class="form-control" ng-model="newClnt.name" placeholder="Contact Person Name" required > 
</form> 

和控制器的保存功能是

function(newClnt, newClntForm){ 
    angular.copy({},newClnt); 
    // newClntForm is form name 
    newClntForm.$setPristine(); 
    newClntForm.$setUntouched(); 
};