2014-03-31 102 views
0

使用兩個幾乎相同的情況下,我有兩個不同的值:的jQuery沒有找到由AngularJS創建的元素在指令

月1日的情況是:

<ul id="test1"> 
    <li>Test 1</li> 
    <li>Test 2</li> 
    <li>Test 3</li> 
</ul> 

第二個場景是:

<ul id="test2"> 
    <li ng-repeat="item in items">{{item}}</li> 
</ul> 

在AngularJS指令中,我想發現<ul>元素中的<li>元素。

... 
link: function(scope, elem, attrs) { 

    var firstLength = $("#test1 li").length; // it gives me 3. 
    var secondLength = $("#test2 li").length; // it gives me nothing, 0. 
} 

爲什麼,在第二個方案中,我沒有<li>元素,即使它們被AngularJS產生的?謝謝!

+2

指令可能正在RAN輸出列表之前 – tymeJV

+1

鏈接功能可以將角JS引擎改變它的模板'前執行:/' – Stphane

+0

你都是對的。感謝你的回答! – Kiwanax

回答

0

我試圖在鏈接方法中獲取的內容正在執行之前 AngularJS填充<li>數據。所以,它不能正常工作。感謝所有的答案!

0

雖然海報對知道爲什麼會發生這種情況感到滿意,但我想我應該添加自己的解決方案來解決此問題,以防其他人遇到此問題。您可以通過觀察用於生成元素的對象來輕鬆解決問題。

link: function($scope, $element, $attrs) { 
    var initialized = false; 

    $scope.$watch('items', function(newValue, oldValue) { 
    if (initialized === false) { 
     initialized = true; 
     //do some stuff 
     //i.e. do something with all items or unbind the watch 

     return; 
    } 

    //do some other stuff if it's not the initialization run through 
    //i.e. update just the changed item 
    }, true); 
} 
相關問題