2014-12-29 1 views
2

이 간단한과 같은 간단한 각 형태가 있습니다.값에 따라 각진 폼 더티 상태를 확인하십시오.

JS :

angular.module('myApp', []).controller('AppController', function($scope) { 
    $scope.values = { 
    value: 'default' 
    }; 
}); 

HTML :

<form name="form"> 
    <div class="form-group"> 
    <label for="input">Value</label> 
    <input type="text" class="form-control" ng-model="values.value"> 
    </div> 
    <pre>form.$dirty = {{form.$dirty}};</pre> 
</form> 

나는 값이 다시 원래로 돌아 왔을 때 자연 그대로의 내에서 설정하고 폼 상태의 더러운 추적합니다.

이것이 원래 값이고이 값과 같지 않은 값으로 만 더럽 힙니다.

예를 들어, 사용자가 무언가를 입력 한 다음 default을 입력하면 from.$dirty = true을보고 싶습니다. 나는 그것을 선언 방법을 수행 할 수 있도록 다음과 같은 지침을 작성했습니다 어떤 다른 해결책이없는 경우

$scope.$watch('values.value', function (newValue) { 
    if (newValue === 'some-default-value) { 
     this.formName.$setPristine(); 
    } 
} 

답변

2

:

0

당신은 다음처럼 작성할 수 있습니다.

은 지침 :

angular.module('myApp').directive('trackValue', function() { 
    return { 
    require: 'ngModel', 
    link: function(s, e, a, ngModelCtrl) { 
     ngModelCtrl.$setOriginalValue = function(value) { 
     ngModelCtrl.$originalValue = angular.copy(value); 
     } 
     ngModelCtrl.$parsers.push(function(value) { 
     if(angular.equals(value, ngModelCtrl.$originalValue)) { 
      ngModelCtrl.$setPristine(); 
     } 
     return value; 
     }); 
    } 
    } 
}); 

그럼 당신은 가치와 형태로 변경 사항을 저장할 수는 그것과 비교되어야한다.

$scope.form.value.$setOriginalValue($scope.values.value); 

my plunker이 지침에서 원하는 동작을 얻었습니다. 입력 값을 다른 것으로 변경할 수는 있지만 default을 다시 입력하면 입력 상태가 초기 상태로 재설정됩니다.

+0

나는보다 일반적인 방법을 찾고 있습니다. 이처럼 10 개 이상의 필드가있을 때 어떻게해야합니까? 나는 그것을위한 특별한 지시에 감사드립니다. –