递归树模板,包括以多维索引作为参数的ng-click

时间:2017-12-08 15:30:03

标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

晚上好,

有没有办法创建一个递归显示结构的模板,并且每个项目都有一个onclick函数。此onclick函数需要当前索引,包括此元素的所有父索引(例如,下面列表中的宝马[0] [2] [1])。

A [0]
  Tree [0][0]
    ...
  House [0][1]
    ...
  Car [0][2]
    Mercedes [0][2][0]
    BMW [0][2][1]
    Audi [0][2][2]
    VW [0][2][3]
    Chrysler [0][2][4]
B [1]
  ...
C [2]
  ...

我当前的指令看起来像这样,但我不知道如何获得ng-click函数的每个元素的FULL INDEX。

app.directive('collection', function () {
    return {
        restrict: "E",
        replace: true,
        scope: {
            collection: '='
        },
        template: `
          <ul>
            <member ng-repeat='member in collection'
                    member='member' index='$parent.index + $index'>
            </member>
          </ul>`
    }
});

app.directive('member', function ($compile) {
    return {
        restrict: "E",
        replace: true,
        template: "<li ng-click=\"select(member)\">{{member.title}}</li>",
        link: function (scope, element, attrs) {
            var collectionSt = '<collection collection="member.sub"></collection>';
            if (angular.isArray(scope.member.sub)) {
                $compile(collectionSt)(scope, function(cloned, scope) {
                    element.append(cloned); 
                  });
            }
        }
    }
});

1 个答案:

答案 0 :(得分:1)

在控制器中,为每个成员添加fullIndex属性,并将该属性作为ng-click函数的参数返回:

template: `<li ng-click="select(member.fullIndex)">{{member.title}}</li>`,

让模板使用AngularJS表达式计算fullIndex值会使应用程序难以理解,调试和维护。最好在JavaScript中进行计算。