angularjs 在指令链接函数中访问父元素(主体)

m0rkklqb  于 2022-10-31  发布在  Angular
关注(0)|答案(1)|浏览(156)

给定一个类似下面的HTML结构:

<body>
    <div id="one" my-directive></div>
    <div>
        <div id="two" my-directive></div>
    </div>
</body>

当我尝试访问two的父元素时它工作并且日志返回父div,但是当父元素是body时,比如one,它不工作并且返回一个空集.

app.directive 'myDirective', ->
    (scope,iElement,iAttrs) ->
        console.log iElement.parent()

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

dxxyhpgq

dxxyhpgq1#

事实上,你正确地理解了你的问题:$compile将触发您的元素上的模板编译和链接阶段,因此在执行此操作时它没有父级。
解决这个问题的简单方法是首先将HTML附加到主体,然后 * 编译它。

var html = body.render();
$('body').html(html);
$compile(angular.element(body))($rootScope);

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

var elem = $( body.render() ).appendTo($('body'));
$compile(elem)($rootScope);

相关问题