问题描述

我定义了一个能够允许消费者 Component 将其自定义内容通过 content projection 投射进来的 Component:

import { Component } from '@angular/core';@Component({selector: 'app-zippy-basic',template: `Default:<ng-content></ng-content>Question:<ng-content select="[question]"></ng-content>`
})
export class ZippyBasicComponent {}

其中包含 defaultquestion 两个区域。

对于 question 区域而言,只有在消费 Component 提供的内容,满足第 10 行指定的选择器时,该内容才能被投影到 app-zippy-basic 内部。

我的消费代码如下:

<app-zippy-basic><p #question>带了问号的 p 节点</p><p>普通 p 节点</p>
</app-zippy-basic>

我期望的结果:

  • 普通 p 节点,出现在 default 区域;
  • 带了问号的 p 节点,出现在 question 区域。

实际测试结果:question 区域为空。

问题分析

根据 Angular 官网的定义,select="[question]" 的语法含义是,将消费 Component 中具有 questionattribute 的 dom 节点,投射到 app-zippy-basic 中。因此,第 23 行中的 # 应该去掉,这样才能产生一个具有 question 属性的 p 节点:

去掉之后,p 节点果然按照我们期望的那样,显示在 default 区域了:

我们再来通过单步调试的方式,找到带有 question 属性的 p 节点是如何被选择以及投射的。

Angular 框架内部维护了一个叫做 LViewLogic View 的数据结构,这是一个数组:

LView 的内容:

其中索引为 21 的数组元素,rawSlotValue,存放的就是需要被投影到 question 区域,带有 question 属性的 p 节点。

总结

如果组件包含一个没有 select 属性的 ng-content 元素,则该实例会接收与任何其他 ng-content 元素都不匹配的所有投影组件。

逻辑视图 (LView) 表示模板 (TView) 的实例。 我们使用逻辑这个词来强调开发人员如何从逻辑角度看待应用程序。 ParentComponent 包含一个 ChildComponent。 从逻辑的角度来看,我们认为 ParentComponent 包含 ChildComponent,因此称为逻辑。 逻辑一词与渲染树的最终概念形成对比。

Angular 内容投影 content projection 关于选择器问题的单步调试相关推荐

  1. Angular 内容投影 content projection 的一个问题的单步调试

    问题描述 我使用如下代码测试一个最简单的 Angular 内容投影场景: import { Component } from '@angular/core';@Component({selector: ...

  2. Angular 内容投影 content projection 关于条件渲染问题的单步调试

    问题描述 本文涉及到的代码位置:https://github.com/wangzixi-diablo/ngDynamic ng-container 和 ngTemplateOutlet 的配合使用. ...

  3. Angular 基于自定义指令的内容投影 content projection 问题的单步调试

    问题描述 本文涉及到的代码位置:https://github.com/wangzixi-diablo/ngDynamic 我有一个能接受内容投影的 Angular Component: 具体投影内容, ...

  4. Angular 内容投影 II

    内容投影是一种模式,你可以在其中插入或投影要在另一个组件中使用的内容. 简单来说,angular的内容投影就相当于vue的内容插槽slot.所有一下就能懂了. 1.单插槽内容投影 单插槽内容投影是指创 ...

  5. Angular 内容投影出现 No provider for TemplateRef found 错误的单步调试

    问题描述 本文涉及到的代码位置:https://github.com/wangzixi-diablo/ngDynamic 我有一个能接受内容投影的 Angular Component: 使用如下代码消 ...

  6. angular 内容投影

    app HTML <div class="wrapper"><h2>我是父组件</h2><div>这个div定义在父组件中</ ...

  7. 关于 Angular view Query 的 id 选择器问题的单步调试

    问题描述 我有这样一个 Angular Component,模板文件如下: @Component({ selector: 'example-app', template: ` <pane id= ...

  8. Angular依赖注入的一个例子和注入原理单步调试

    定义一个抽象服务类: export abstract class GreetingService {abstract greet(name: string): string;} 定义一个具体类实现该抽 ...

  9. Angular里interpolation text节点的创建逻辑,单步调试

    通过一个例子来学习: 新建一个Component,只包含一个名为hero的属性,包含一个name字段,值为Jerry: export class AppComponent implements OnI ...

最新文章

  1. 面向过程的软件设计方法
  2. libevent中的hash表
  3. libevent之Reactor模式详解
  4. 踩坑日记:Logstash同步数据库有type字段导致同步失败
  5. 李洪强漫谈iOS开发[C语言-025]-赋值运算符案例
  6. kafka消费速度跟不上生产速度的解决方案!
  7. python开学吧真假,开学第一课,课课有总结
  8. 背包——01背包Bone Collector(hdu2602)
  9. SQL性能第1篇:关系优化
  10. antdesignpro 重定向到登录页面_URL重定向跳转绕过
  11. Hibernate JPA中@Transient、@JsonIgnoreProperties、@JsonIgnore、@JsonFormat、@JsonSerialize等注解解释...
  12. 模式实例之——中介者实例
  13. Desktop Aquarium Wallpaper‪s for mac(高清水族馆屏保)
  14. md5加密算法~Java语言实现
  15. 南京大学Sweeper(2000)原创:地理系在哈佛的灭亡与计量革命
  16. win7系统64位系统怎么计算机配置,电脑装64位系统有什么要求|64位系统安装条件是什么...
  17. multisim中轻触开关在哪_轻触开关在各种电子产品上的运用
  18. 《Targeted Backdoor Attacks on Deep Learning Systems Using Data Poisoning》论文总结
  19. Nacos Go微服务生态系列(一) | Dubbo-go 云原生核心引擎探索
  20. 顺时针螺旋打印二维数组

热门文章

  1. python类的构造方法名称_搞懂Python的类和对象名称空间
  2. FTP客户端的基本使用---Linux学习笔记
  3. 阿里开源Euler:国内首个工业级图表征学习框架
  4. Codeigniter 4.0-dev 版源码学习笔记之六——控制器
  5. 《Python入门经典》——导读
  6. Android 实用开源控件
  7. Exchange 邮件投递被拒的问题分析
  8. linux 其他参数
  9. 分享Silverlight/WPF/Windows Phone一周学习导读(06月13日-06月18日)
  10. 保护SQL Server数据库的十大绝招