javascript – AngularJS – 如何在指令渲染完成时查询DOM
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – AngularJS – 如何在指令渲染完成时查询DOM,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1612字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试使用AngularJS指令实现自定义滚动窗格组件.在下面的jsfiddle example我有一个基本原型的例子.
这是我的想法的架构:
这是指令代码:
myApp.directive('lpScrollPane', function factory() {
return {
restrict: 'A',
replace: true,
transclude: true,
template: '<div class="scrollPaneWrapper"><div class="scrollPane" ng-transclude></div><div class="thumbTrack" ></div></div>',
compile: function (tElement, tAttrs) {
var minHeight = 30;
return function (scope, iElement, iAttrs) {
var thumbTrack = angular.element(iElement.children()[1]);
scope.onScrollHeight = function () {
console.log(iElement.children()[0].scrollHeight);
var H1 = iElement[0].offsetHeight;
var H2 = iElement.children()[0].scrollHeight;
if (H2 > H1) {
var trackHeight = Math.round(minHeight + (H1 - minHeight) * (1 - Math.pow((H2 - H1) / H2, 0.8)));
thumbTrack.css({
display: "block",
height: trackHeight + "px"
});
console.log(H2, H1, trackHeight);
} else {
thumbTrack.css({
display: "none"
});
}
};
scope.$watch(function () {
scope.onScrollHeight();
//setTimeout(scope.onScrollHeight, 100)
});
}
}
};
});
基本上有2次潜水1隐藏溢出,1次溢出滚动和另一个div模仿拇指跟踪器.
我的目标是监视scrollHeight属性,然后相应地更改跟踪器高度.问题是$watch在呈现DOM之前被触发,因此显示和计算跟踪器有延迟.现在我在watch函数上使用了setTimeout,它运行正常(取消注释第35行和注释34以查看它的运行情况).
什么是正确的方法呢?
解决方法:
见is there a post render callback for Angular JS directive?
不幸的是,没有办法确定何时渲染完成(例如,没有事件).使用$timeout似乎是最好的解决方法.
在上面的链接中,@ Nik在评论中提到他正在检查$(‘tr’).长度> 3,针对他的特定场景,确定渲染何时完成.也许你可以在DOM中定期检查以确定渲染是否完整.
内容总结
以上是互联网集市为您收集整理的javascript – AngularJS – 如何在指令渲染完成时查询DOM全部内容,希望文章能够帮你解决javascript – AngularJS – 如何在指令渲染完成时查询DOM所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。