2016-05-21 5 views
0

入れ子配列を持つjsonオブジェクトの配列があります。私はこれらのネストされた配列でリストを作成するためにng-repeatを使用しています。私はリストからボタンをクリックすると動的に項目を削除したい。私はthat-ng-repeat生成リストから動的に要素を削除する

$scope.remove= function(path){ 
    var obj = $scope.results[$scope.editIndex]; 

    var i; 
    for(i = 0; i<path.length-1;i++){ 

     var key = path[i].key; 
     var index = path[i].index; 
     if(!obj[key]) return; 
     obj = obj[key] 

    } 
    delete obj[path[i].key][path[i].index]; 

} 

を行うには、コントローラ内の関数を書かれているし、呼び出すことが

<ul ng-show="showFeatures"> 
    <li ng-repeat="(featureIndex,feature) in result.features"> 
     <span ng-bind="feature" contenteditable={{result.edit}}></span> 
      <i class="flr-always material-icons pointer" ng-show="result.edit" ng-click="remove([{key:'features',index:featureIndex}])">delete</i> 
    </li> 
</ul> 

問題は、最初の要素のインデックスはで変更されます後として、私は、複数の要素を削除することができないということですlike-配列を返しますが、ng-repeatはそのスコープ内のインデックスを変更しません。どうすればこの問題を解決できますか?変更を加えた後でng-repeatを作っても構わないのですか?
私は角度jを覚えていますので、そのようなことをするより良い方法があれば教えてください。ここで

答えて

0
<li ng-repeat="(featureIndex,feature) in result.features"> 
     <span ng-bind="feature" contenteditable={{result.edit}}></span> 
      <i class="flr-always material-icons pointer" ng-show="result.edit" ng-click="remove([{key:'features',index:featureIndex}])">delete</i> 
</li> 

result.features配列です。したがって、削除するアレイインデックスに対応するAngularJSテンプレートから$ indexを送信してください。
例えば、NGクリック= は、コントローラに

function remove(index){ 
    $scope.result.features.splice($index, 1) 
} 
0

をしてみてください "($インデックス)を削除し、" この:

<li ng-repeat="feature in result.features"> 
    <span ng-bind="feature" contenteditable={{result.edit}}></span> 
     <i class="flr-always material-icons pointer" ng-show="result.edit" ng-click="remove(feature)">delete</i> 
</li> 

とremove関数で

function remove(feature){ 
    var index = $scope.result.features.indexOf(feature); 
     if(index > -1) 
     $scope.result.features.splice(index, 1); 
    } 

var app = angular.module("app", []); 
 

 
app.controller('mainCtrl', function($scope){ 
 
    $scope.result = { 
 
        features: 
 
         [ 
 
         "ali","reza","amir" 
 
        ] 
 
       }; 
 
    
 
    
 
    $scope.remove = function(feature){ 
 
    var index = $scope.result.features.indexOf(feature); 
 
     if(index > -1) 
 
     $scope.result.features.splice(index, 1); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.2/css/font-awesome.min.css" rel="stylesheet"/> 
 

 
<div ng-app="app" ng-controller="mainCtrl"> 
 
     <li ng-repeat="feature in result.features"> 
 
     <span ng-bind="feature"></span> 
 
     <i ng-click="remove(feature)">delete</i> 
 
    </li> 
 
</div>

+0

jsonオブジェクトで配列のインデックスが変更されます。 – krrish

+0

私は簡単な例を書いています。更新された回答をご覧ください。 –

関連する問題