放置视图后应该运行的代码放在哪里?

时间:2015-09-03 15:36:57

标签: javascript angularjs

编辑:实际上,这不是重复。我问如何在 Dynamic DOM可用后运行代码,而不是 Static DOM:

enter image description here

因为我的textarea位于ngRepeat内,所以它们在静态DOM中不可用。

我在Angular应用中使用autosize。我试图在我的控制器开始时这样调用autosize

autosize(document.getElementsByTagName('textarea'));

它不起作用,大概是因为在调用函数时,document.getElementsByTagName为空。

所以我需要在呈现DOM元素之后调用函数。我怎么能这样做?

注意:我也尝试将其放在run块中,但这也不起作用。

1 个答案:

答案 0 :(得分:2)

这是一个通常被描述为'所有DOM内容的实例转到指令'。将第三方代码与Angular数据绑定集成将需要一些额外的措施,但只是为了初始化它很容易:

app.directive('textarea', function ($timeout) {
  return {
    restrict: 'E',
    link: function (scope, element) {
      $timeout(function () {
        autosize(element[0]);
      });
    }
  };
});
零延迟的

$timeout确保在使用初始状态呈现DOM之后代码运行(特别是ng-repeat的情况)。