2014-09-25 81 views
0

使用角度我创建了一个主题应用程序。它具有重置主题功能,这将允许用户将主题重置为更早。以下是我的角码。我在同一范围内创建了2个json变量 - currentThemedefaultTheme。 currentTheme被绑定以形成元素,使用该元素用户可以修改各种属性的值。作为默认json的角度商店响应

 var ThemeApp = angular.module('ThemeApp', []); 
     ThemeApp.controller('ThemeCtrl', ['$scope', '$http', function ($scope, $http) { 
      $http.get("javascripts/myTheme.json").success(function(data) { 
       $scope.defaultTheme = data; 
       $scope.currentThemes = data; 
       console.log($scope.defaultTheme[0]); 
      }); 
      $scope.saveTheme = function() { 
       ... 
      }; 
      $scope.resetTheme = function() { 
       console.log($scope.defaultTheme); 
       $scope.currentThemes = $scope.defaultTheme; 
      }; 
     }]); 

当我们改变表单字段,则defaultTheme JSON也得到改变的值。我可以从resetTheme函数的控制台声明中观察到这一点。我也尝试将defaultTheme作为全局变量,但它也会发生变化。有针对这个的解决方法吗?

+2

你能改说你的问题吗?目前还不清楚你想达到什么目标。 – 2014-09-25 12:34:32

+0

它们都是相同的对象引用。如果您不希望它们引用相同的对象/数组,请进行复制 – charlietfl 2014-09-25 12:54:32

回答

1

当您将其分配给defaultTheme时,您可以使用lodash执行cloneDeep数据对象。这样他们将以相同的值开始,但不同的对象,所以当您更改表单时,它不会更改默认值。代码看起来像这样:

$scope.defaultTheme = _.cloneDeep(data);