在.splice()之后重置角度函数中的数组副本

时间:2014-09-18 21:35:11

标签: javascript arrays angularjs

我想要完成的是制作一个角度下拉菜单,从列表中删除当前页面。加载下一个视图时,我希望菜单重置并删除当前视图。

构成下拉菜单的对象数组

var menuItems = [
    {menuItem: 'home', url: '/'},
    {menuItem: 'depth', url: '/depth'},
    {menuItem: 'bolt circle', url: '/bolt_circle'}
];

将数组和.slice()排序()从数组中排出当前页面的angular函数。

       $scope.sort = function(){
           $scope.items = menuItems;
           for(i=$scope.items.length-1; i>=0; i--){
               var obj = $scope.items[i];

           if($location.path() === obj.url){
               $scope.items.splice(i, 1);
            }
        }

我对angular和javascript很新,所以我没有建立关于为什么menuItems看起来像.splice()以及$ scope.items的连接,每次我去一个页面它都会被删除菜单,直到我没有链接。我本以为每次运行sort()函数时都会生成数组的副本会给我一个新的数组副本。我希望我解释得那么好。

1 个答案:

答案 0 :(得分:0)

执行此操作时:

$scope.items = menuItems;

制作menuItems数组的副本,而是在items对象中创建一个新属性$scope strong>相同的数组引用为menuItems。这意味着$scope.itemsmenuItems是相同的。

为了创建menuItems数组的副本,您应该这样做:

$scope.items = menuItems.slice(0);