指令模板中的ng-repeat - 访问索引

时间:2015-12-09 13:18:57

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

我有以下问题:

我有一个自定义指令,通过在模板字符串中使用ng-repeat来显示一个或多个表。在每个表中,放置了几个其他自定义指令。我希望这些知道所使用元素的索引,但无法完成这项工作。我的代码现在看起来像这样:

.directive('myStuffText', function ($rootScope){
    return {
        restrict: 'A',
        require: '^form',
        replace: true,
        scope: true,
        template:
        ......
        '<table border="1" ng-repeat="elt in myModel.newStuffList">
        ......

        '<tr>' +
        '<td colspan="3"><div my-add-some-editor my-element-index="$index"/></td>' +
        '</tr>' 
        '</table>',

        link: function (scope, elt, attrs){
            scope.cockpitPolicyModel.newPolicyList = [];
        }
    };

})

独立于我的尝试,我总是在my-add-some-editor指令的模板函数中得到字符串$ index或{{$ index}},而不是它的值..

编辑 - 添加了嵌套指令:

.directive('myAddSomeEditor', function($rootScope){
    return {
        restrict: 'A',
        require: '^form',
        scope: true,

        template: function ($scope, $attr){


            return 
            .....
            '<span id="myAddSomeEditor" name="myAddSomeEditor" class="form-control" my-generic-editor '+
            'my-input-mapping="myModel.someText"></span>'
            .....
            ;
            }
    };
})

1 个答案:

答案 0 :(得分:1)

这可能是因为在你的my-add-some-editor指令中你在隔离范围中有这个定义:

myElementIndex: '@'

这就是为什么你要在HTML中获得你在那里写的字的字符串。

将其更改为:

myElementIndex: '='

编辑:由于您说您没有使用隔离范围,请在父指令中尝试:尝试执行my-element-index="{{$index}}"。这在儿童指令的链接功能中:

link: function (scope, elem, attr) {
    attr.$observe('index', function(val) {
      scope.index = val;
    });
}