2016-01-20 48 views
1

我有一个简单的任务,事实证明这并不那么简单..我需要一个$scope变量的副本,而不使用angular.copy() ,因为如果我使用复制功能,如果进行了更改,则该对象无法与观察者的newVal进行比较,因为它不是同一个对象。所以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