2017-10-30 16 views
0

私はこのコードを持っている:角度省デフォルトの配列

$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でも、それをプッシュすることです。

私がしようとしているのは、サイドバーリンクが尋ねられたらリセットし、この特定の要素をこのローカル変数だけにプッシュすることです。

$scope.SidebarLinks = $scope.DefaultSidebarLinks; 

同じ配列の2人の異なる名前同じすなわち二つの配列を作成している:

+1

'$ scope.SidebarLinks = $ scope.DefaultSidebarLinks'はコピーを作成しません**。両方の名前はまったく同じ配列オブジェクトを参照します。 – jonrsharpe

+2

代わりに 'angular.copy($ scope.DefaultSideBarLink)'を使うことができます – devqon

答えて

1

温次のような配列を割り当てます。彼らは同じメモリを指しているので、$scope.SidebarLinksの変更は、両方とも同じであるため、配列$scope.DefaultSidebarLinksも変更されます。

あなたがしたい場合は深いコピーあなたは多くの方法でそれを行うことができ、アレイ:

ソリューション1(角道):

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

対処方法2(ジャバスクリプト道):

基本的に
$scope.SidebarLinks = $scope.DefaultSidebarLinks.slice(); 

slice()オペレーションは配列をクローンし、新しい配列への参照を返します。

関連する問題