2016-03-17 45 views
5

我在JS遞歸陣列:AngularJS - 如何訪問一個嵌套的NG-重複一個數組裏面

[{ 
    type: 'cond', 
    conditionId: 1, 
    conditions: undefined 
}, 
{ 
    type: 'cond', 
    conditionId: 2, 
    conditions: undefined 
}, 
{ 
    type: 'group', 
    conditionId: undefined, 
    conditions: [{ 
     type: 'cond', 
     conditionId: 3, 
     conditions: undefined 
    }, 
    { 
     type: 'cond', 
     conditionId: 4, 
     conditions: undefined 
    }] 
}] 

它採用NG-重複遞歸地與聯模板顯示在AngularJS:

<script type="text/ng-template" id="recursive_template.html"> 
<div> some logic </div> 
     <div ng-repeat="cond in cond.conditions" ng-include="'recursive_template.html'"></div> 
    <div> some more logic </div> 
</script> 

<div ng-controller="EditRulesController"> 
    <div ng-repeat="cond in conditions" ng-include="'recursive_template.html'" class="row"> 
    </div> 
</div> 

一切工作正常。 現在我想從內部刪除一個項目ng-repeat。我可以通過$ index以及對象cond作爲參數ng-click來點擊(刪除)的項目的索引。我還可以訪問$父但它指向的對象的根......

如何在沒有手動訪問內部陣列貫穿整個條件陣列遞歸搜索?奇怪的是,您可以輕鬆訪問內部數組的索引,但不能訪問實際的數組實例。

有關此問題的任何建議?謝謝。

編輯21/03/2016

接受的答案之前,「蠻力」的版本中實現這樣的:

 $scope.deleteConditionClick = function (id) { 
      deleteCondition($scope.conditions, id); 
     }; 

     function deleteCondition(conditions, id) { 

      var conds = conditions; 
      if (conds) { 
       for (var i = 0; i < conds.length; i++) { 
        if (conds[i].type === 'cond') { 
         if (conds[i].conditionId === id) { 
          conds.splice(i, 1); 
          return true; 
         } 
        } else if (conds[i].type === 'group') { 

         deleteCondition(conds[i].conditions, id); 
        } 
       } 
      } 
     } 

我希望這會幫助別人有類似的問題。

+0

您無法以cond.conditions.type,cond.conditions.conditionId的身份訪問它嗎? –

+0

'$ parent。$ parent' - 'ngInclude'正在您的父母重複和您的孩子重複之間創建另一個*範圍。 – tymeJV

+0

'$ parent。$ parent'給了我控制器範圍,所以數組的根就是了。 –

回答

2

您是否嘗試過設置你刪除動作要ng-click="cond=undefined"這將清空去​​?。?有條件的。然後,您可以使用ng-show/ng-if來控制視圖中的可見性。

0

您可以通過父陣列和對象作爲參數(例如:ng-click="delete(conditions, cond)「),並使用.indexOf()功能找對象的指數(例如$scope.delete = function(conditions, cond){index = conditions.indexOf(cond)...}

+1

是的,我試過這個,但它給了我數組的根,因爲控制器中有一個'$ scope.conditions'。我也嘗試將該變量重命名爲與內部數組具有不同名稱。不幸的是它不起作用。 –

1

我這是怎麼抓住與多個項目指標:

<div ng-repeat="x in outerArray" ng-init="outerIndex = $index"> 
    <div ng-repeat="y in innerArray"> 
    {{ innerArray[outerIndex] }} 
    </div> 
</div> 

我覺得這是你問的是什麼,我希望它有助於

+0

謝謝,我喜歡這個。問題是我的對象可以嵌套在任何層次上,而不僅僅是2.在這種情況下,需要一個外部索引列表,這個列表再次難以管理。 –

+0

@michaelbinks的解決方案是否解決了問題,或者我應該提出其他建議嗎? –

+0

是的,這是一個非常好的解決方法,但我很好奇,如果你有任何其他的想法:) –