gpt4 book ai didi

javascript - 使用 $compile 创建指令,并立即获取 DOM 属性

转载 作者:行者123 更新时间:2023-11-29 21:42:47 24 4
gpt4 key购买 nike

我创建了一个动态创建多个指令的 angularjs 指令,并将它们放在 DOM 上的特定 div 中。
在我创建每个指令之后,我需要计算包装 div 的大小,以进行额外的操作。我看到在调用 $compile() 动态创建指令后,它们还不在 DOM 中。

如何在调用 $compile() 后强制 angularjs 立即更新 DOM,以便之后我可以玩 DOM?

这是一个试图展示我在做什么的例子:

// This is my wrapping directive
angular.module('myModule').directive('wrapper', function($compile) {
return {
restrict: 'A',
template: '<div></div>',
scope: {
// the scope here is a list of objects that are the models for the inner directives to be created
innerModels: '='
},
link: function(scope, element, attrs) {
for (var i=0; i<innerModels.length; i++) {
var innerDirective = $compile('<inner-directive ng-model="innerModels['+i+']"></inner-directive>')(scope);
element.append(innerDirective);

// here I want to get the client size of the 'div' i created
var divHeight = element[0].clientHeight;
// divHeight == 0

// but after the page loads
// if i open the developer console when the page is finished loading, then the div does have a clientHeight value

}
}
};
});

angular.module('myModule').directive('innerDirective', function() {
return {
restrict: 'E',
template: '<span ng-bind-template="{{somethingFromModel}}"></span>',
scope: {
ngModel: '='
},
link: function(scope, element, attrs) {
// some logic...
}
};
});

注意:我在这里没有使用 jQuery(所以如果答案不包括 jQuery 解决方案,我会很高兴)

最佳答案

简单的答案是在下一个摘要周期中运行您的代码,这将确保您的元素已绘制在 DOM 上,您可以使用 $timeout 来完成。

代码

    link: function(scope, element, attrs) {
for (var i=0; i<innerModels.length; i++) {
var innerDirective = $compile('<inner-directive ng-model="innerModels['+i+']"></inner-directive>')(scope);
element.append(innerDirective);
}

// here I want to get the client size of the 'div' i created

$timeout(function(){
//here you will get update height.
//play with rendered DOM here
})

// but after the page loads
// if i open the developer console, then the div does have a clientHeight value
}

关于javascript - 使用 $compile 创建指令,并立即获取 DOM 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32164798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com