Angular-1.5.x组件树的加载如何工作?

时间:2016-08-07 09:37:50

标签: angularjs

我阅读了AngualrJS的文件:https://docs.angularjs.org/guide/component
当我阅读“组件树的示例”部分时,我对组件树的加载方式感到困惑,因为无处可寻找加载顺序。

angular如何找到root指令和嵌套指令(可能在模板中)?哪个组件应该先开始工作?我的意思是,如果嵌套的component()早于其指令的外观被调用,那么它的指令出现后会被调用吗?当指令/模板加载时,angular如何知道调用的相应组件?或者只是迭代所有组件方法?或者首先加载所有组件,然后根据index.html形成组件层次结构,然后正确调用它?

有人好心解释一下吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

感谢 estus !,您的anwser真的很有帮助!根据{{​​3}}和 Pete Bacon Darwin AngularJS : How does the HTML compiler arrange the order for compiling?

<小时/> 在我看来:
Angular首先调用所有组件comiple()方法来完成整个模板加载,然后将它们的controller()方法调用到指令层次结构。

<小时/> 这来自:example

  

注意Angular在DOM节点上运行而不是在DOM节点上运行是很重要的   字符串。通常,你没有注意到这个限制,因为当a   页面加载,Web浏览器自动将HTML解析到DOM中。

     

HTML编译分三个阶段进行:

     
      
  1. $compile遍历DOM并匹配指令   如果编译器发现元素与指令匹配,则该指令将添加到与DOM匹配的指令列表中   元件。单个元素可以匹配多个指令。
  2.   
  3. 一旦识别出与DOM元素匹配的所有指令,编译器就会按照priority对指令进行排序。
    每个   指令的compile函数被执行。每个compile函数   有机会修改DOM。每个compile函数返回一个   link功能。这些功能组成一个&#34;组合&#34;链接   function,调用每个指令返回的link函数。
  4.   
  5. $compile通过调用上一步中的组合链接函数将模板与范围链接。这反过来会   调用各个指令的链接功能,注册   关于元素的听众,并设置How directives are compiled s   scope,因为每个指令都配置为。{/ li>