首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在dom完成渲染后,我如何运行指令呢?

在dom完成渲染后,我如何运行指令呢?
EN

Stack Overflow用户
提问于 2012-09-03 07:43:22
回答 6查看 131.3K关注 0票数 115

我有一个看似简单的问题,但没有明显的解决方案(通过阅读Angular JS文档)。

我得到了一个Angular JS指令,它根据其他DOM元素的高度进行一些计算,以定义DOM中容器的高度。

与此类似的事情正在指令中发生:

代码语言:javascript
复制
return function(scope, element, attrs) {
    $('.main').height( $('.site-header').height() -  $('.site-footer').height() );
}

问题是,当指令运行时,找不到$('site-header'),返回一个空数组,而不是我需要的jQuery包装的DOM元素。

是否有一个回调可以在我的指令中使用,它只在DOM加载之后运行,并且我可以通过普通的jQuery选择器风格的查询访问其他DOM元素?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-09-03 14:41:58

这取决于你的$('site-header')是如何构造的。

您可以尝试使用延迟为0的$timeout。类似于:

代码语言:javascript
复制
return function(scope, element, attrs) {
    $timeout(function(){
        $('.main').height( $('.site-header').height() -  $('.site-footer').height() );
    });        
}

解释它的工作原理:onetwo

不要忘记在您的指令中注入$timeout

代码语言:javascript
复制
.directive('sticky', function($timeout)
票数 137
EN

Stack Overflow用户

发布于 2014-05-07 05:55:14

我是这样做的:

代码语言:javascript
复制
app.directive('example', function() {

    return function(scope, element, attrs) {
        angular.element(document).ready(function() {
                //MANIPULATE THE DOM
        });
    };

});
票数 44
EN

Stack Overflow用户

发布于 2014-01-07 13:54:04

也许作者不再需要我的答案了。尽管如此,为了完整起见,我觉得其他用户可能会发现它很有用。最好也是最简单的解决方案是在返回的函数体中使用$(window).load()。(或者,您可以使用document.ready。这真的取决于你是否需要所有的图像)。

在我看来,使用$timeout是一个非常弱的选择,在某些情况下可能会失败。

下面是我使用的完整代码:

代码语言:javascript
复制
.directive('directiveExample', function(){
   return {
       restrict: 'A',
       link: function($scope, $elem, attrs){

           $(window).load(function() {
               //...JS here...
           });
       }
   }
});
票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12240639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档