Angular组件学习之浅析内容投影

本篇文章带大家了解一下angular组件中的内容投影。内容投影和vue中的插槽很类似,在组件封装的时候非常有用,我们一起来体验一下

Angular组件学习之浅析内容投影

【相关教程推荐:《angular教程》】

1. 投影一块内容

容器组件这样写

  编号1  

登录后复制

业务组件这样用

未指定投影位置的内容会被投影到无select属性的区域

登录后复制

2. 投影多块内容/组件

容器组件这样写

使用标签锁定投影位置

使用class锁定投影位置

用自定义组件名称锁定投影位置

使用自定义属性锁定投影位置

  编号2        

登录后复制

业务组件这样用

  

使用标签锁定投影位置

  
使用class锁定投影位置
  使用自定义组件名称锁定投影位置  
使用自定义属性锁定投影位置

登录后复制

演示

1.png

3. 投影子元素

使用ng-container来包裹子元素,减少不必要的dom层,类似vue中的template

容器组件这样写

  编号4  

登录后复制

业务组件这样写

      

内容投影酷吗?

内容投影酷吗?

内容投影酷吗?

内容投影酷吗?

登录后复制

4. 有条件的内容投影

中文网的描述:

如果你的组件需要_有条件地_渲染内容或多次渲染内容,则应配置该组件以接受一个 ng-template 元素,其中包含要有条件渲染的内容。

在这种情况下,不建议使用 ng-content 元素,因为只要组件的使用者提供了内容,即使该组件从未定义 ng-content 元素或该 ng-content 元素位于 ngIf 语句的内部,该内容也总会被初始化。

使用 ng-template 元素,你可以让组件根据你想要的任何条件显式渲染内容,并可以进行多次渲染。在显式渲染 ng-template 元素之前,Angular 不会初始化该元素的内容。

使用ng-container定义我们的投影区块

使用ngTemplateOutlet指令来渲染ng-template元素。

通过内置的动态指令*ngIf来控制是否渲染投影。

  编号3    

       

登录后复制

在业务组件中我们使用ng-template来包裹我们的实际元素。

my-hello组件只在ngOnInit()做日志输出来观察打印情况。

  
      
      有条件的内容投影~  

登录后复制

现在你会发现页面并没有像前面那么顺利的正常渲染,因为我们的逻辑还没有串通,我们继续。创建一个指令,并在NgModule中注册,一定要注册才能用哦~

指令需要注册哦~

import { Directive, TemplateRef } from '@angular/core';@Directive({  selector: '[appContent]',})export class ContentDirective {  constructor(public templateRef: TemplateRef) {}}

登录后复制

我们再定义一个指令来控制组件中显示/隐藏的标识

指令需要注册哦~

@Directive({  selector: '[appToggle]',})export class ToggleDirective {  @HostListener('click') toggle() {    this.app.expanded = !this.app.expanded;  }  constructor(public app: PageContainerComponent) {}}

登录后复制

在我们的容器组件中申明刚才定义的内容指令,页面目前不报错咯~

export class PageContainerComponent implements OnInit {  expanded: boolean = false;  @ContentChild(ContentDirective)  content!: ContentDirective;}

登录后复制

通过日志可以看到我们在切换容器组件的expanded标识时,只有开启状态my-hello组件才会初始化,下面的这个ngIf虽然在页面看不到渲染的内容,但组件实实在在被初始化过了。

  

登录后复制

5. @ContentChild & @ContentChildren

使用这两个装饰器来对被投影的组件进行操作

使用注解在业务组件中定义被投影的组件

@ContentChild(HelloWorldComp)helloComp: HelloWorldComp;@ContentChildren(HelloWorldComp)helloComps: QueryList;

登录后复制

在ngAfterContentInit()钩子执行后对被投影组件进行操作

6. @ViewChild & @ViewChildren

使用这两个装饰器来对指接子组件进行操作

使用注解在业务组件中定义子组件

@ViewChild(HelloWorldComp)helloComp: HelloWorldComp;  @ViewChildren(HelloWorldComp)helloComps QueryList;

登录后复制

在ngAfterViewInit()钩子执行后对直接子组件进行操作

结语

关于组件的使用我们就先写到这里了,文笔功底有限,加油了~

更多编程相关知识,请访问:编程入门!!

以上就是Angular组件学习之浅析内容投影的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2709140.html

(0)
上一篇 2025年3月7日 20:29:14
下一篇 2025年2月23日 01:07:11

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Angular父子组件间怎么进行通信?父子传值的方式浅析

    angular父子组件间怎么进行通信?本篇文章给大家介绍一下angular父子组件传值方式。 通过Input和Ouput传值 父组件:html和ts 登录后复制 public name: string = “jack”;public cha…

    2025年3月7日
    200
  • 带你详细了解Angular中的变更检测

    本篇文章带你详细了解一下Angular中的变更检测,给大家介绍一下Angular 的 DOM 更新机制、变更检测能解决什么问题等。 通过这篇的文章,可以帮助你收获这些知识: Angular 的 DOM 更新是如何做到的?【相关教程推荐:《a…

    2025年3月7日 编程技术
    200
  • Angular怎么构建组件?3种方法介绍

    angular怎么构建组件?本篇文章给大家介绍一下angular创建项目的方法,angular创建组件的三种方式。 一、angular 与angularjs的区别是什么? 命名变化,Angular2 以后官方命名为Angular, 2.0 …

    2025年3月7日 编程技术
    200
  • 浅谈Angular组件之间通信的5种方法

    angular组件间怎么通信?下面本篇文章给大家介绍一下angular组件之间通信的5种方法,有需要的可以参考~ 组件是angular的构建单元,在项目中为了保证组件之间的数据能够来回的传递,angular封装了一些能够实现组件之间通信的方…

    2025年3月7日
    200
  • 手把手教你使用Angular CDK Portal创建动态内容

    之前介绍过原生 API 的动态视图插入,功能上已经可以满足大多数使用场景。不过也有一些缺憾,还没有解决在 Angular 应用外插入内容的需求,指令也不能跟动态插入的组件有输入输出的交互。 好在 Angular 官方提供了一套组件开发套件 …

    2025年3月7日
    200
  • 浅谈Angular中如何使用路由?

    angular中如何使用路由?本篇文章就来带大家了解一下angular中使用路由的方法,快速入门angular路由,希望对大家有所帮助! 路由的概念在前端的框架中得到了广泛的应用,对于路由的感念不做阐述,路由的应用无外乎就是嵌套、传参,高级…

    2025年3月7日
    200
  • 聊聊Angular中的自定义管道

    angular中管道有什么用?特点是什么?怎么自定义管道?下面本篇文章带大家了解一下angular中的管道,介绍一下自定义管道的方法,希望对大家有所帮助! 一、管道的作用 方便我们在模板中对我们的数据进行格式化处理。【相关教程推荐:《ang…

    2025年3月7日
    200
  • 深入了解Angular中的路由

    什么是路由?本篇文章带大家深入了解一下angular中的路由,希望对大家有所帮助! 路由简介 路由是实现单页面应用的一种方式,通过监听hash或者history的变化,渲染不同的组件,起到局部更新的作用,避免每次URL变化都向服务器请求数据…

    2025年3月7日
    200
  • 深入浅析Angular中的依赖注入

    什么是依赖注入?本篇文章带大家了解一下angular中的依赖注入,希望对大家有所帮助! 依赖注入概念: 维基百科对依赖注入的解释:在软件工程中,依赖注入是实现控制反转的一种软件设计模式,一个依赖是一个被其他对象(client)调用的对象(服…

    2025年3月7日
    200
  • 聊聊Angular中常用的错误处理方式

    本篇文章带大家深入了解一下angular中常用的错误处理方式,希望对大家有所帮助! 错误处理是编写代码经常遇见的并且必须处理的需求,很多时候处理异常的逻辑是为了避免程序的崩溃,本文将简单介绍Angular处理异常的方式。【相关教程推荐:《a…

    2025年3月7日
    200

发表回复

登录后才能评论