2016-01-20 3 views
1

У меня простая задача, которая оказалась не такой простой. Мне нужно взять копию переменной $scope, не используя angular.copy() , потому что, если я использую функцию копирования, объект не может сравниться с наблюдателя, если это изменение сделано, потому что это не тот же объект. Таким образом, if (newVal !== original) никогда не будет оцениваться до false. Как сохранить исходное значение переменной области видимости, но никогда не обновлять эту переменную снова, даже если переменная области изменяется? Является ли это возможным?Как скопировать/сохранить исходное значение переменной области видимости без обновления при обновлении переменной области.

core.directive('saveButton', function() { 

    return { 
     scope: { 
      actionParams: '=', 
     }, 
     templateUrl: 'app/views/components/core/save-button.html', 
     link: function(scope, element, attrs) { 

      var original = scope.actionParams; 

      scope.$watch(function() { 
       return scope.actionParams; 
      }, function(newVal, oldVal) { 

       // I want to check if the original value has changed, not the previous value 
       if (newVal !== original) { 
        scope.changed = true; 
       } 
       else { 
        scope.changed = false; 
       } 
      }, true); 
     } 
    } 
}); 
+0

вы дали это попробовать? http://stackoverflow.com/questions/29546930/is-the-angular-scope-binding-ampersand-a-one-time-binding – jcc

+0

@jcc Да, не работает:/ – Chrillewoodz

ответ

2

просто хранить json-представление - он никогда не изменится, и вы всегда можете сравнить его с json-представлением нового значения. https://docs.angularjs.org/api/ng/function/angular.toJson

или вы можете сравнить объекты с помощью angular.equals: angular.equals({b : { c : [1, 2]}, a : 'a'}, {a : 'a', b : { c : [1, 2]}}) >> правда

+1

Фактически работал, но человек это уродливо .. Но все равно, после 3-х попыток: P ура! – Chrillewoodz

Смежные вопросы