【问题标题】:Angular saving default array角度保存默认数组
【发布时间】:2017-10-30 16:07:54
【问题描述】:

我有这个代码:

$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,并仅在此局部变量中推送新的给定元素。

【问题讨论】:

  • $scope.SidebarLinks = $scope.DefaultSidebarLinks创建副本;两个名称都引用了完全相同的数组对象。
  • 你可以改用angular.copy($scope.DefaultSideBarLink)

标签: angularjs arrays push


【解决方案1】:

你像这样分配一个数组:

$scope.SidebarLinks = $scope.DefaultSidebarLinks;

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

如果你想深拷贝一个数组,你可以通过多种方式实现:

解决方案1(角度方式):

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

解决方案2(javascript方式):

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

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

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 2018-01-02
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2019-03-17
    • 1970-01-01
    相关资源
    最近更新 更多