Dom 通过angularjs中的$scope获取html属性

Dom 通过angularjs中的$scope获取html属性,dom,recursion,angularjs,ng-repeat,Dom,Recursion,Angularjs,Ng Repeat,好的,我在AngularJS中使用ng include和ng repeat创建一个递归列表,如下所示: <div id="wrapper"> <div id="text" ng-click="DivClick()"> <ul> <li id="{{$index}}" ng-repeat="data in layer" ng-include="'recursion.html'"></li> </ul&

好的,我在AngularJS中使用ng include和ng repeat创建一个递归列表,如下所示:

<div id="wrapper">
<div id="text" ng-click="DivClick()">
    <ul>
        <li id="{{$index}}" ng-repeat="data in layer" ng-include="'recursion.html'"></li>
    </ul>
</div>
 0
 1
   1-0
   1-1
     1-1-0
   1-2
   1-3
 2
   2-0
因此,每个新的
  • 都有一个id,它等于“其父项的id”+“-$index”。
    我所知道的是作用域。layer[]及其层子体包含一个字段,该字段将保存
  • 的ID并显示它,但我希望避免将该额外字段保存在DB中,因为解决方案非常简单(如示例所示),但我无法理解语法。有什么建议吗?

    在将数据传递到
    $scope.label
    之前,您可以使用递归循环分支并添加
    id
    属性的函数对其进行循环

    var data = [{
        name: 'foo',
        children: [{
            name: 'foo child',
            children: [{
                name: 'foo child grandchild'
            }, {
                name: 'foo child grandchild2'
            }]
        }, {
            name: 'foo child2'
        }]
    }, {
        name: 'bar'
    }]
    
    function createID(arr, parentID) {
       for (var i = 0; i < arr.length; i++) {
            var id = (i + 1).toString();
            var thisID = parentID ? parentID + '-' + id : id;
            arr[i].id = thisID;
            if (arr[i].children) {
                 createID(arr[i].children, thisID)
             }
        }
     }
    createID(data, null)
    
    var数据=[{
    名称:“foo”,
    儿童:[{
    姓名:'foo child',
    儿童:[{
    姓名:“富儿孙女”
    }, {
    姓名:“富儿孙2”
    }]
    }, {
    姓名:'foo child2'
    }]
    }, {
    名称:“酒吧”
    }]
    函数createID(arr,parentID){
    对于(变量i=0;i

    演示

    我认为您想要做的是从父元素中获取
    $index

    您可以使用
    $parent.$index
    -或者在本例中,它可能是
    $parent.$parent.$index
    ,因为您正在使用
    ng repeat->ng include->ng repeat

    有关类似情况的更多信息,请参见此答案:

    递归遍历
    数组的所有分支,为每个元素对象添加一个ID属性,并在标记中输出带有角度扩展的新属性,这相当简单。提供
    数据的示例,但问题是,这只适用于一个级别,这意味着如果我需要获得孙子的id,例如2-3-1,我将获得3-1,因为我只接触第一个父级。这是我最初的想法,但这意味着我将为每个递归级别提供一个额外字段,并扩展我的数据库,或者是一个只存储ID的全新结构,当我的json结构加载时,我必须初始化ID,这会很复杂。无法简单地访问父作用域中
  • 的“id”属性?无法访问尚未创建的值。您在父范围中谈论的
    id
    值是什么?例如,在LI标记的父迭代中,每个LI都有自己的id,我需要这些id。如果不是这样,我如何创建自己的函数来调用{{}方括号?我以为这是一项新服务,但我不能很好地掌握它。。。我明天再做。不清楚你在说什么。它在你的数据中吗?如果是,请提供数据样本。你在问题中暗示不存在ID。我提供的解决方案有什么问题?属性可用于
    {{item.id}
    var data = [{
        name: 'foo',
        children: [{
            name: 'foo child',
            children: [{
                name: 'foo child grandchild'
            }, {
                name: 'foo child grandchild2'
            }]
        }, {
            name: 'foo child2'
        }]
    }, {
        name: 'bar'
    }]
    
    function createID(arr, parentID) {
       for (var i = 0; i < arr.length; i++) {
            var id = (i + 1).toString();
            var thisID = parentID ? parentID + '-' + id : id;
            arr[i].id = thisID;
            if (arr[i].children) {
                 createID(arr[i].children, thisID)
             }
        }
     }
    createID(data, null)