Javascript 如何确保在呈现dom后调用我的dom操作函数/代码?

Javascript 如何确保在呈现dom后调用我的dom操作函数/代码?,javascript,dom,asynchronous,angularjs,angularjs-directive,Javascript,Dom,Asynchronous,Angularjs,Angularjs Directive,我有一个angular应用程序,其中一个模型更改会触发一个弹出窗口,它是一个指令。我需要在此弹出窗口上选择一个元素,但DOM更新(“$digest”)似乎是异步的,因此它在第一次显示/创建弹出窗口时不起作用。这适用于后续弹出窗口。如何确保在创建弹出窗口并使用所有子元素呈现后运行代码 以下是等效代码: angular.module('mymodule', []).directive('myDirective', function() { return { require: ngMode

我有一个angular应用程序,其中一个
模型
更改会触发一个弹出窗口,它是一个
指令
。我需要在此弹出窗口上选择一个元素,但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');
        }
      }
    }
  }
});

为此,您可以使用AnguarJS的
$timeout
服务

因此,您必须将代码包装在回调中。。。比如:

$timeout(function() {
    // your code here
}, 0);
$timeout
窗口的AngularJS包装。setTimeout
。 在浏览器事件队列中添加新事件;由于呈现引擎已在此队列中,浏览器将在处理队列中的新任务之前完成页面呈现


我在我的博客上写了一篇关于这个话题的文章。。。您可以在需要时将其用作参考。

为什么需要在此弹出窗口中“选择”元素?选择后您想做什么?@ganaraj:弹出窗口中显示了一些文本,我需要为用户显示预先选择的文本。谢谢,我不知道在浏览器渲染后运行
$timeout
。这是可行的,但我很好奇如何将参数传递给回调?我找不到任何方法来做这件事。