在指令链接函数中访问父元素(正文)

ola*_*nod 9 angularjs angularjs-directive

给定类似于此的HTML结构:

<body>
    <div id="one" my-directive></div>
    <div>
        <div id="two" my-directive></div>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

当我尝试访问two它的父元素时工作并且日志返回父div,但是当父元素是主体时,one如果不是这样,它不起作用并返回一个空集.

app.directive 'myDirective', ->
    (scope,iElement,iAttrs) ->
        console.log iElement.parent()
Run Code Online (Sandbox Code Playgroud)

编辑:我对这个问题的猜测是我的应用程序的主体在客户端呈现并附加到模块的run方法的body元素.插入html $('body').html($compile(body.render())($rootScope));,我想在内容插入正文之前,在$ compile函数中调用该指令.我可以解决这个问题吗?

flo*_*bon 0

事实上,您正确理解了您的问题:$compile将触发元素上的模板编译和链接阶段,因此在执行此操作时它没有父级。

解决这个问题的简单方法是首先将 HTML 附加到正文,然后编译它。

var html = body.render();
$('body').html(html);
$compile(angular.element(body))($rootScope);
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想编译整个主体而只想编译新元素:

var elem = $( body.render() ).appendTo($('body'));
$compile(elem)($rootScope);
Run Code Online (Sandbox Code Playgroud)