组件完全就绪后执行一个函数

时间:2017-09-21 11:43:17

标签: angularjs angularjs-components

我有一个angularjs组件,它有一个模板,一个控制器,一些绑定,一些被转换的部分。

我将此组件及其属性放在我的DOM中:

<mycomponent attr1="x" attr2="y"></mycomponent>

组件的控制器和/或组件的模板将使用这些属性值在某处进行转换。

我需要在组件完全创建之后运行一个函数,即它已经在DOM上创建了模板所有被转换的元素都有被赋予了价值。

我怎样才能做到这一点?我尝试将函数放在控制器的$ postLink()钩子中,但是当$ postLink()触发时,我发现转换还没有运行。

此外,我不想乱用组件的控制器,因为组件非常通用,我把它放在DOM的几个地方,只有其中一个应该运行这个功能在完成创作之后。

3 个答案:

答案 0 :(得分:1)

对于AngularJS 1应用程序,DOM初始化后有两种运行函数的方法:

  1. 你可以毫无延迟地使用$ timeout - $ timeout(function(){/ *调用你的函数* /});
  2. 或使用由Angular&#39; jqLit​​e
  3. 提供的.ready()

答案 1 :(得分:1)

在Angular 2中:

ngAfterViewInit()

在Angular初始化组件的视图和子视图后进行响应。 在第一次ngAfterContentChecked()之后调用一次。 仅限组件的挂钩。

Jquery中的

$( document ).ready(function() {
        console.log( "document loaded" );
    });
javascript中的

window.onload(function(){
//here
});
angular1:

中的

angular.element(document).ready(function () {
        //content here
    });

答案 2 :(得分:0)

来自AngularJS文档中的"Components have a well-defined lifecycle"段落:

  

$ postLink()-在此控制器的元素及其子元素之后调用   已链接。类似于后链接功能,此钩子可以是   用于设置DOM事件处理程序和直接进行DOM操作。注意   包含 templateUrl 指令的子元素将没有   已被编译并链接,因为他们正在等待其模板   异步加载,他们自己的编译和链接已经   暂停,直到发生这种情况。这个钩子可以被认为类似于   Angular 2中的 ngAfterViewInit ngAfterContentInit 挂钩。   Angular 1中的编译过程非常不同,没有   升级时应直接映射并小心。