编辑:实际上,这不是重复的。我问的是如何在动态 DOM 可用时运行代码,而不是静态 DOM:
因为我的 textarea
位于 ngRepeat
中,所以它们在静态 DOM 中不可用。
我正在使用 autosize在 Angular 应用程序中。我试图在我的 Controller 开始时像这样调用 autosize
:
autosize(document.getElementsByTagName('textarea'));
它不起作用,大概是因为在调用函数时,document.getElementsByTagName
是空的。
所以我需要在呈现 DOM 元素后 调用该函数。我该怎么做?
注意:我也试过将它放在 run
block 中,但这也没有用。
最佳答案
这是通常被描述为“所有 DOM 内容都交给指令”的实例。将第三方代码与 Angular 数据绑定(bind)集成将需要一些额外的措施,但只是为了初始化就这么简单:
app.directive('textarea', function ($timeout) {
return {
restrict: 'E',
link: function (scope, element) {
$timeout(function () {
autosize(element[0]);
});
}
};
});
$timeout
零延迟确保代码在 DOM 以初始状态呈现后运行(ng-repeat
尤其如此)。
关于javascript - 应该在渲染 View 后运行的代码放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32379951/