如何确保我的dom操作函数/代码在dom被渲染后被调用
How to make sure my dom manipulating function/code is called after the DOM has been rendered?
我有一个有棱角的应用程序,其中一个model
变化触发一个弹出式,这是一个directive
。我需要在这个弹出窗口上选择一个元素,但是DOM更新('$digest')似乎是异步的,因此它在第一次显示/创建弹出窗口时不起作用。这适用于随后的弹出窗口。我如何确保我的代码在弹出窗口创建并呈现所有子元素后运行?
下面是等效代码:
angular.module('mymodule', []).directive('myDirective', function() {
return {
require: ngModel,
link: function($scope, element, attrs, ctrl) {
element.addClass('foo');
// And similar stuff
ctrl.$render = function justRender() {
if (ctrl.viewValue) {
element.modal('show');
/* Here I have code for selecting the contents of the pop-up,
which doesn't work as DOM is not assuredly rendered at this time.
*/
} else {
element.modal('hide');
}
}
}
}
});
你可以使用angarjs的$timeout
服务。
所以你必须在回调中包装你的代码…比如:
$timeout(function() {
// your code here
}, 0);
$timeout
是window.setTimeout
的AngularJS包装器。它在浏览器事件队列中添加了一个新事件;由于呈现引擎已经在这个队列中,浏览器将在处理队列中的新任务之前完成页面呈现。
相关文章:
- 如何获取dom元素的代码行号
- 如何删除DOM事件处理程序的重复JavaScript代码
- findout js代码遍历DOM中的哪个元素
- 始终是在DOM就绪后执行的文档底部编写的代码
- 用于查找JS代码中引用的DOM元素的工具
- Polymer:当数组中的对象被外部代码修改时,更新dom重复元素
- DOM 直接从他的 HTML 代码创建对象
- 如何将 HTML 代码写入 DOM
- DOM 树操作 (document.createElement) 代码重用
- 如何从特权代码使用 Dom 文件 API
- 使用 jQuery 查询 DOM,代码不起作用
- DOM 元素更改在 JavaScript 代码中不可见
- 在 DOM 上以“向上”和“向下”方向操作时如何避免重复代码
- 为什么谷歌跟踪代码管理器使用IFrame而不是脚本DOM元素
- 具有等效代码的不同 DOM 结构
- 使用 jQuery 操作 DOM 时,代码不同步
- DOM代码中有什么错误
- select标记的DOM代码
- 在$httpAngular.js之后使用jquery处理生成的DOM代码
- 为什么我的JS/DOM代码显示没有内容