2015-11-10 44 views
0

我在js和angularjs中很新,遇到了一些我无法解决的基本问题。 我使用ng-repeat将$ scope.consignations添加到视图中。它是一个有几层的大对象。在示例代码中,我将$ scope.consignations赋值给temp,之后,我在temp对象内部“导航”,并在某些时候将数据推送到temp。它按预期改变视图。现在我想清除$ scope [elementName] obj,但它也从视图中清除了推送的数据。我试图删除临时引用(我认为它只是$ scope.consignations obj的引用),并且我不能再访问它,但是当我清除$ scope [elementName]时,它将清除视图。在javascript中删除对象引用

$scope.addElements = function(elementName){ 
    temp=$scope.consignations; 

    for (var key in someArray) { 
     //here i "navigate" recursive inside temp 
    } 
    temp.push($scope[elementName]); 
    delete temp; 
    for (var key in $scope[elementName]) { 
     $scope[elementName][key]=""; 
    } 
}; 
+0

你想完成什么? –

+1

你觉得'delete temp'在做什么?删除操作符只用于删除属性,而不是对象。 –

+0

我想用temp更新$ scope.consignations,但在完成之后,我想在$ scope.consignations或视图中没有任何其他更改的情况下清空$ scope [elementName]。 – user3130985

回答

0

temp=$scope.consignations这样做你的temp & $scope.consignations引用相同的对象。 因此,任何对象的更改都会反映在其他对象以及视图中。

因此,您应该像$scope.temp=angular.copy($scope.consignations)那样复制它,然后使用$scope.temp进行视图绑定,将$ scope.consignations用于其他目的。

0

如果您想从$ scope复制现有的元素到新的$ scope变量并删除旧的那个,那么您可以使用以下方法。

$scope.consignations.push(angular.copy($scope[elementName])); 
delete $scope[elementName]; 

假设$ scope.consignations是你新的数组要存储数据和$范围[的ElementName]是您要删除旧的。