5

html

<div repeater ng-repeat='item in items' class='first' id = '{{$index}}' > {{item}} </div>

angularjs 指令:-

angular.module('time', [])
  .directive('repeater', function() {

    var linkFn = function(scope, element, attrs){
      var id = $(element).attr('id');
      alert(id); // {{$index}}
    } ...

在 ng-repeat 中创建的动态 id,当在指令内部调用时显示为 {{$index}} 而不是 value = 0, 1, 2 ...

您如何确保指令中的链接器函数执行时使用动态 ID?我认为可以在指令中使用$compile来完成。但我不太明白怎么做?

$compile(element)(scope) 

是语法。但显然是错误的顺序。

4

2 回答 2

2

如果您确实需要已填充 ID,您可以在内部运行相关代码scope.$evalAsync$timeout确保首先更新绑定。我建议尽量避免需要检查 DOM,而是依赖您的模型来获取任何此类信息,使用scope.$index.

您的指令已经在编译时并在达到链接功能时链接,所以我认为重新编译无济于事。这只是等待足够长的时间以完成链接并开始$digest实际更新属性的情况。这正是$evalAsync将为您做的事情。

此处示例:http ://plnkr.co/edit/n77x4C?p=preview

于 2013-10-09T01:41:10.060 回答
1

我希望这能帮到您

  1. 指示

     angular.module('time', []).directive('repeater', function() {
       return{
              restrict:"E",
              scope:{
                    itemarray: "=itemarray"
                 }
              template:"<div ng-repeat='item in itemarray' class='first' id = '{{$index}}' > {{item}} </div>",
               link:linkFn
            }
              var linkFn = function(scope, element, attrs){
             var id = $(element).attr('id');
             alert(id); // {{$index}}
    

    } ...

  2. html

           <repeater itemarray='itemarray"></repeater>
    
于 2013-10-09T04:25:17.157 回答