2015-08-18 5 views
0

Я пытаюсь отключить кнопку, расположенную рядом с флажком, но только если базовая модель этого флажка отличается от базовой первоначальное значение. Самостоятельное на своем собственном не работает, потому что технически форма была изменена. Моим решением было захватить исходное значение и переключить первоначальное значение формы, исходя из того, соответствует ли текущее значение этому значению.Как установить значение ng-disabled для кнопки на основе исходного значения модели

Я предполагаю, что есть лучший способ, о котором я не знаю.

<div ng-controller="MyCtrl"> 
     <div ng-form="form"> 
     <div class="checkbox"> 
      <label> 
      <input type="checkbox" ng-click="toggle(form)" ng-model="foo.bar">{{ foo.bar }} 
      </label> 
     </div> 
     <button class="btn btn-primary" ng-disabled="form.$pristine" ng-click="save(form)">Button</button> 
    </div> 
    </div> 

angular.module("app", []) 
    .controller("MyCtrl", function($scope, $timeout){ 

    //catch when scope is first set 
    $scope.$watch("foo", function(curr, prev){ 
    if(curr && !prev) 
     $scope.original = curr.bar; 

    }); 

    //assume this is being set by some other scope 
    $timeout(function(){ 
    $scope.foo = { 
     bar: true 
    }; 
    }, 500); 

    $scope.toggle = function(form){ 
    if($scope.original == $scope.foo.bar) 
     form.$setPristine(); 
    console.log(form.$pristine); 
    }; 

    $scope.save = function(form){ 
    $scope.original = $scope.foo.bar; 
    form.$setPristine(); 
    }; 
}); 

ответ

2

Я не понимаю, почему вы используете $ чистые, или $ watch.

Просто хранить исходное значение в переменной области действия, когда контроллер реализованным, и использовать

ng-disabled="foo.bar != original" 
+0

большую точку ... я определенно overthinking. –