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。ディレクティブ内で呼び出されると、値 = 0、1、2 ... ではなく {{$index}} として表示されます。

ディレクティブのリンカー関数が動的 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 に答える