博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Directive Controller And Link Timing In AngularJS
阅读量:7009 次
发布时间:2019-06-28

本文共 2412 字,大约阅读时间需要 8 分钟。

 

I've talked about  a few times before. But, it's a rather complicated topic, so I don't mind digging a bit deeper. This time, I'm looking at the timing of directive controllers vs. directive link functions. As the DOM (Document Object Model) is compiled by AngularJS, the directive controllers and link functions execute at different parts of the compile lifecycle.

When AngularJS compiles the DOM, it walks the DOM tree in a depth-first, top-down manner. As it walks down the DOM, it instantiates the directive controllers. Then, when it gets to the bottom of a local DOM tree branch, it starts linking the directives in a bottom-up manner as it walks back up the branch. This doesn't mean that all directive controllers are run before all directive linking; it simply means that in a local DOM branch, the directive controllers are instantiated before they are linked.

To see this in action, I've put together a very simple DOM tree in which each element has a unique (but almost identical) directive. As each directive controller and link function is executed, it will log to the console. This way, we can see the timing of the various methods in relation to the DOM tree structure.

    
Directive Controller And Link Timing In AngularJS

Directive Controller And Link Timing In AngularJS

Woot!

Woot, indeed!

  

Before we look at the console output, take note that there are two "mid" branches. This means that AngularJS has two branches to explore before it can fully walk back up to the top DOM node. That said, when we do run the above code, we get the following console log output:

Outer - Controller

Mid - Controller
Inner - Controller
Inner - Link
Mid - Link
Second Mid - Controller
Second Mid - Link
Outer - Link

As you can see, as AngularJS walks the DOM tree, it instantiates the directive controllers on the way down; then, it links the directives on the way back up.

This is an important difference. While you can only access the DOM tree in the bottom-up linking phase, the directive controller can provide a hook into the top-down lifecycle. This can be critical if you have to handle DOM events based on when elements of the DOM tree came into existence. The linking phase can never give you that because it's executed in reverse.

转载地址:http://hqttl.baihongyu.com/

你可能感兴趣的文章
Mongodb Mac安装
查看>>
中间件事务码R3AC1里Block Size的含义
查看>>
实战Android 上推下拉——隐藏、显示ActionBar
查看>>
使用MDK5新建STM32开发环境
查看>>
java时区理解
查看>>
人工智能让边缘计算更有价值!
查看>>
React 设计模式和场景分析
查看>>
Node.js教程第三篇—— Node.js 流
查看>>
自动将BAT文件转换为EXE
查看>>
京东的批作业?
查看>>
ubuntu下salt安装使用初体验
查看>>
PowerShell 多线程测试IP端口
查看>>
使用SQL Server 2008 Extended Events SSMS Addin轻松管理XEvents
查看>>
Django-celery 安装及使用测试
查看>>
Linux字符设备驱动编写流程
查看>>
一台CentOS主机上运行多个Tomcat7的配置
查看>>
SQL2K数据库开发三之收缩数据库
查看>>
优秀UML制图开源工具--ArgoUML
查看>>
Alfresco安装与配置图解
查看>>
Virtual Machine Manager 2012 R2创建SQL 配置文件
查看>>