2016-02-05 118 views
2

我正在角材料中添加一个简单的窗体,我也有一个取消按钮来清除窗体。我尝试使用$ setPristine()但仍然输入字段在调用clearForm函数后显示红色。我在这里回答了一些答案,但这并没有解决我的问题。 这里是我的index.html和app.js

<form id="addForm" name="myForm"> 
       <fieldset id="addField"> 
        <legend id="addFormLegend">Create Post</legend> 
        <md-input-container class="md-block"> 

         <md-icon md-svg-src="name.svg"></md-icon> 
         <input ng-model="post.name" type="text" placeholder="Name" ng-required="true"> 
        </md-input-container> 
        <md-input-container class="md-block"> 

         <md-icon md-svg-src="desc.svg"></md-icon> 
         <input ng-model="post.desc" type="text" placeholder="Description" ng-required="true"> 
        </md-input-container> 
        <md-input-container class="md-block"> 

         <md-icon md-svg-src="link.svg"></md-icon> 
         <input ng-model="post.url" type="url" placeholder="Url " ng-required="true"> 
        </md-input-container> 
        <md-button ng-click="clearForm()" class="md-raised md-primary" id="cancelButton"> Cancel </md-button> 
        <md-button ng-click="createPost(post)" class="md-raised md-primary" ng-disabled="myForm.$invalid" id="addButton"> Add Post </md-button> 
       </fieldset> 

      </form> 

app.controller('mainCtrl', ['$scope', '$firebaseArray', 'posts', function ($scope, $firebaseArray, posts) { 
     $scope.posts = posts; 
     $scope.showForm = false; 
     var defaultForm = { 
      name: "", 
      desc: "", 
      url: "" 
     }; 
     $scope.demo = {}; 
     $scope.post = angular.copy(defaultForm); 

     $scope.createPost = function (post) { 
      $scope.posts.$add({ 
       name: post.name, 
       desc: post.desc, 
       url: post.url 
      }); 
      $scope.post = {}; 
     }; 
     $scope.showAddForm = function() { 
      $scope.showForm = true; 
     }; 
     $scope.clearForm = function() { 
      // $scope.showForm = false; 
      $scope.myForm.$setPristine(); 
      $scope.post = angular.copy(defaultForm); 
      console.log('empty'); 


     } 
    }]); 
+0

您使用的是哪个版本的angularjJS? –

+0

angularjs 1.4.9 –

回答

3

其实我经​​历了很多答案,但都没有工作。于是我做了我的app.js

$scope.clearForm = function() { 
      $scope.showForm = false; 
      $scope.myForm.$setPristine(); 
      $scope.myForm.$setUntouched(); 
      $scope.post = {}; 
} 

所以基本上增加$ scope.myForm添加这些行$ setUntouched()。$ setPristine()为我工作。

0

尝试在控制器上创建的范围porperty,如$scope.form = null;那么你改变形式的名称form.myForm。那么你应该可以从控制器中调用$scope.form.myForm.$setPrestine()

这是因为表单创建了自己的作用域,并没有直接添加到控制器作用域中。

但是现在您正在创建一个属性form,表单控制器被分配到该属性,并可以依次从控制器访问该属性。

+0

我试过了,我在这里经过了很多答案,但验证仍在发生 –

+0

你能提供一个jsFiddle或类似的吗? –

+0

我解决了它,几分钟后,我做了什么应用所有表单属性,并检查输出,应用$ scope.myForm。$ setUntouched(); $ scope.myForm之后。$ setPristine();为我工作 –