Angular save默认数组

时间:2017-10-30 16:07:54

标签: angularjs arrays push

我有这段代码:

$scope.DefaultSidebarLinks = [
{
  "Link":"/home",
  "Title":"Home",
  "Icon":"fa-home"
}
];

$scope.SidebarLinks = $scope.DefaultSidebarLinks;

$scope.addSidebarLink = function(link,title,icon,resetFirst){
var element = {"Link":link,"Title":title,"Icon":icon};
if(resetFirst)
  {
    $scope.SidebarLinks = $scope.DefaultSidebarLinks;
    $scope.SidebarLinks.push(element);
  }
else
  $scope.SidebarLinks.push(element);
}

主要问题是当我在SidebarLinks中推送一个新元素时,它也会在DefaultSidebarLinks中推送它。

我想要做的是在被询问时重置SidebarLinks并仅在此局部变量中推送新的给定元素。

1 个答案:

答案 0 :(得分:1)

你可以这样分配一个数组:

$scope.SidebarLinks = $scope.DefaultSidebarLinks;

您正在创建两个相同的数组,即同一个数组的两个不同名称。它们指向相同的内存,因此$scope.SidebarLinks中的任何更改也会更改数组$scope.DefaultSidebarLinks,因为它们都是相同的。

如果您想深度复制数组,可以通过多种方式实现:

Solution1(Angular方式):

$scope.SidebarLinks=angular.copy($scope.DefaultSidebarLinks);

Solution2(javascript方式):

 $scope.SidebarLinks = $scope.DefaultSidebarLinks.slice();

基本上,slice()操作克隆数组并返回对新数组的引用。