Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-如何访问嵌套ng repeat中的数组_Javascript_Arrays_Angularjs_Recursion - Fatal编程技术网

Javascript AngularJS-如何访问嵌套ng repeat中的数组

Javascript AngularJS-如何访问嵌套ng repeat中的数组,javascript,arrays,angularjs,recursion,Javascript,Arrays,Angularjs,Recursion,我在js中有一个递归数组: [{ type: 'cond', conditionId: 1, conditions: undefined }, { type: 'cond', conditionId: 2, conditions: undefined }, { type: 'group', conditionId: undefined, conditions: [{ type: 'cond', conditionId: 3,

我在js中有一个递归数组:

[{
  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
    }]
}]
它以AngularJS的形式显示,使用ng repeat与内联模板递归:

<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获取我单击(要删除)的项目的索引,以及单击时作为参数的对象条件。我也可以访问$parent,但它指向对象的根

如何访问内部数组而无需手动递归搜索整个条件数组?奇怪的是,您可以轻松地访问内部数组的索引,但无法访问实际的数组实例

在这个问题上有什么建议吗?谢谢

编辑2016年3月21日

在接受答案之前,“暴力”版本的实现方式如下:

        $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);
                    }
                }
            }
        }
$scope.deleteConditionClick=函数(id){
deleteCondition($scope.conditions,id);
};
函数deleteCondition(条件,id){
var conds=条件;
如果(秒){
对于(变量i=0;i

我希望它能帮助其他有类似问题的人。

您可以将父数组和对象作为参数传递(例如:
ng click=“delete(conditions,cond)
),并使用
.indexOf()
函数查找对象的索引(例如
$scope.delete=function(conditions,cond){index=conditions.indexOf(cond)}

这是我获取具有多个索引的项目的方式:

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

{{innerArray[outerIndex]}

我想这就是你要问的?我希望这会有所帮助。

您是否尝试将删除操作设置为
ng click=“cond=undefined”
?这将清空已删除的条件。然后,您可以使用ng show/ng if来控制视图中的可见性。

您不能作为cond.conditions.type、cond.conditions.conditionId访问它吗?
$parent.$parent
-
ngInclude
正在父重复和子重复之间创建另一个作用域。
$parent.$parent
给了我控制器作用域,所以数组的根再次被删除。@CoderJohn:我可以访问它,但我想删除它,我需要从中删除包含它的数组。这个例子只有两层,想象一下,如果有10层嵌套。是的,我尝试了这个,但它给了我数组的根,因为控制器中有一个
$scope.conditions
。我还尝试重命名该变量,使其与内部数组具有不同的名称。不幸的是它不起作用。谢谢你,我喜欢这个。问题是我的对象可以嵌套在任何级别,而不仅仅是2级。在这种情况下,需要一个外部索引列表,这同样很难管理。@michaelbinks的解决方案解决了这个问题还是我应该提出其他建议?是的,这是一个很好的解决方法,但我很好奇您是否有其他想法:)