通过单步调试了解Angular中TView和LView的概念@Component({selector:'child',template:`Iamachild.`})exportclassChildViewComponent{}@Component({selector:'parent',template:`
projectedcontent:
`})exportclassParentComponent{}@Component({selector:'demo',template:`
`})exportclassDemo{}whereparentComponentdefines一个内容投影区域,通过下面高亮的代码,将childComponent的内容投影到:这个区域:最终的运行时效果:问题分析当上面的应用加载完成,但是bootstrap还没有完成时,ivy解析成以下TView:consttChildComponentView=newTView(tData:[newTElementNode('span'),newTTextNode('Iamachild.'),],…,);常量tParentComponentView=newTView(tData:[newTElementNode('div'),newTTextNode('projectedcontent:'),newTProjectionNode(),],…,);consttDemoAppView=newTView(tData:[newTElementNode('parent',['id','p1']),newTElementNode('child',['id','c1']),newTElementNode('child',['id','c2']),],…,)接下来的步骤就是bootstrap,具体的集成就是基于TView创建LView:constlParentComponentView_p1=newLView(tParentComponentView,newParentComponent(…),document.createElement('div'),document.createText('projectedcontent:'),);constlChildComponentView_c1=newLView(tChildComponentView,newChildComponent(…),document.createElement('span'),document.createText('我是一个孩子。'),);constlChildComponentView_c2=newLView(tChildComponentView,newChildComponent(…),document.createElement('span'),document.createText('我是孩子。'),);constlDemoAppView=newLView(tDemoAppView,newDemoApp(…),document.createElement('父母'),lParentComponentView_p1,document.createElement('child'),lChildComponentView_c1,document.createElement('child'),lChildComponentView_c2,)以上逻辑在调试器中如下图所示:其中JerryAppComponent作为bootstrapComponent维护:上面代码显示了TView和LView的区别再看ChildComponent,TView只有一个实例,LView却有两个实例,因为ChildComponent用了两次。另一个关键区别是LView仅存储特定于该组件实例的数据——例如组件实例和关联的DOM节点。TView存储在组件的所有实例之间共享的信息——例如需要创建哪些DOM节点。在上面的例子中,LView显示为一个类(newLView(...不同数量的DOM节点和子组件/指令,将其存储在数组中是最有效的方式。使用数组存储的含义是不清楚在数组中存储实例数据的位置。TData用于描述LView中每个位置存储的内容。所以LView本身不足以推理,因为它存储没有上下文的值。TView描述组件需要什么,但它不存储实例信息。通过将LView和TView和Ivy一起可以访问和推理LView中的值。LView存储值,TView存储LView中值的含义,类似于元数据或模式的概念。为了简单起见,LView只存储DOM节点。实际上,LView还存储Bindings、injectors、purifiers和任何其他与视图状态相关的东西(在TView/TData中有相应的条目。)总结对View和View的思考的一种方法是将这些概念与面向对象编程联系起来。TView就像类,View就像类实例。