Angularjs:在编译模板之后,如何运行自定义指令

Angularjs:在编译模板之后,如何运行自定义指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在编写自定义指令,希望指令通过生成的id访问子元素,如下代码所示 <div class="my-directive" data-rawdata="user-{{user_id}}"> <div class="raw user-{{user_id}}" id="user-{{user_id}}" style='display:none'> I'M HERE. </div> </div> 我的指令无法通过id访问元

我正在编写自定义指令,希望指令通过生成的id访问子元素,如下代码所示

<div class="my-directive" data-rawdata="user-{{user_id}}">
    <div class="raw user-{{user_id}}" id="user-{{user_id}}" style='display:none'>
        I'M HERE.
    </div>
</div>
我的指令无法通过id访问元素,因为它还没有完成id的绑定值

有没有办法让我的指令在绑定完成后执行?我尝试了优先级1000,但没有成功


我的建议是:

将指令工作包装在
$timeout
中。这允许链接代码在渲染完成后运行,例如:

$timeout(function(){
    if(element_id){
        var found1 = angular.element("#" + element_id)
        var found2 = angular.element("." + element_id)
        var found3 = angular.element(".raw")

        console.log( [found1.length, found2.length, found3.length] );
        console.log( found3.attr('id') );       //  -> still not compile = user-{{user_id}} ?
        console.log( found3.attr('class') );    //  -> still not compile = user-{{user_id}} ?

        if(found1.length)
            data = "Your data is " + found1.html()
        }

        angular.element(".result", elem).html( data || "Data not found" )
 }, 0);

另外,不要忘记在指令中插入
$timeout

啊,你说得对。我怎么会忘记$timeout几乎可以修复所有问题。谢谢,马特。
$timeout(function(){
    if(element_id){
        var found1 = angular.element("#" + element_id)
        var found2 = angular.element("." + element_id)
        var found3 = angular.element(".raw")

        console.log( [found1.length, found2.length, found3.length] );
        console.log( found3.attr('id') );       //  -> still not compile = user-{{user_id}} ?
        console.log( found3.attr('class') );    //  -> still not compile = user-{{user_id}} ?

        if(found1.length)
            data = "Your data is " + found1.html()
        }

        angular.element(".result", elem).html( data || "Data not found" )
 }, 0);