是否可以删除控制器的所有范围变量? AngularJS

时间:2014-07-25 12:03:47

标签: angularjs

我是AngularJS的新手,我不知道是否可以删除控制器的所有范围变量。我正在使用ng-controller和ng-repeat,就像这样。

<div ng-controller="main">
<div ng-repeat="x in list" ng-controller="test">
    <input type="text" ng-model="text">
     <span ng-click="remove($index)">  x  </span>

<div>
</div>

JS

myapp.controller('main',function($scope){

  $scope.list=[1,2,3,4]
})

myapp.controller('test',function($scope){
  $scope.text="untitiled"
})

我想删除点击的范围。任何人都可以帮助我或建议我一个更好的方法。感谢

1 个答案:

答案 0 :(得分:2)

问题不是很明确,但看起来您可能想要在点击后删除该项目。由于您将remove函数传递给索引,因此可以将其拼接出来。 DOM将自动更新并从列表中删除它:

$scope.remove = function(i) {
   $scope.list.splice(i,1);
   console.log($scope.list);
}

如果您正在做一些不同的事情,只想隐藏它,您可以将索引推送到另一个数组,然后使用ng-showng-hide之类的内容。

 $scope.remove2 = function(i) {
      $scope.hideList.push(i);  
   }

   $scope.shouldHide = function(i) {
      return $scope.hideList.indexOf(i)!=-1;
   }

<div ng-repeat="number in list2" >
 {{number}}
 <span ng-hide='shouldHide($index)' ng-click="remove2($index)">  x  </span>
</div>

以下是两种方案的简单示例。在现实生活中,通常我们处理对象数组,你可能正在做的是在其中一个对象上设置一个属性来隐藏并以这种方式控制它。

演示:http://plnkr.co/edit/G7UINKUCBJ4yZhQNtuJ2?p=info

如果您确实要从示波器中删除所有键:

function removeKeys() {
  for(key in $scope) { 
   if (key.substr(0,1)!='$' && key!='this')
    delete $scope[key];
  }
}