千家信息网

Angular中NgTemplateOutlet指令的理解和用法是什么

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这期内容当中小编将会给大家带来有关Angular中NgTemplateOutlet指令的理解和用法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。最近在看一个培
千家信息网最后更新 2025年11月13日Angular中NgTemplateOutlet指令的理解和用法是什么

这期内容当中小编将会给大家带来有关Angular中NgTemplateOutlet指令的理解和用法是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

最近在看一个培训项目的时候有看到这个NgTemplateOutlet这个结构性指令,但是我之前没接触过,不知道这东西是怎么用的,然后,我去官网上去搜了一下这个api(官网链接点这里)。

只是说一下NgTemplateOutlet的用法和使用场景。

使用方法

这个api按照官网的说法是这样的:

根据一个提前备好的 TemplateRef 插入一个内嵌视图。

我给它翻译一下:使NgTemplateOutlet的宿主元素变成一个内嵌视图--这个内嵌视图是根据一个提前定义好的templateRef模板引用生成的。而宿主元素无论是什么元素,都不会被渲染出来。

我们将官网的示例改一下(因为官网的人命我看不懂):

@Component({  selector: 'ng-template-outlet-example',  template: `        


Hello Hello {{name}}! My name is LeBron {{person}}!`})export class NgTemplateOutletExample { myContext = {$implicit: 'World', lastName: 'James'};}

一个宿主元素可以使用ngTemplateOutlet这个结构性指令,使自己变成任意的一个模板生成的内嵌视图。并且可以给其设置上下文对象。然后我们在这个模板中可以使用let-变量这个模板输入变量来获取上下文对象中的值,这个模板更具灵活性。

应用场景

类似于ng-zorro这个框架的分页组件Pagination(官网链接)。如果我们对默认上一页和下一页的样式或者结构不满意,想要自己调整的话,我们可以提供一个输入属性(@Input定义的属性),来接收一个模板,并且为其提供所必须的属性或者方法。这样的话,我们就可以在不修改组件源码的情况下实现组件的复用。

Demo

我们先定义一个子组件HeroDisplayCard,角色的展示界面

@Component({  selector:'app-hero-display-card',  template:`    

角色列表

  • 角色id:{{h.id}}-- 角色名字:{{h.name}}-- 角色属性:{{h.features}}

`, styles:[ `.hero-card-box{ width: 600px; margin: 10px auto; } .hero-card-item{ list-style: none; } ` ]})export class HeroDisplayCard { public heroesList = [ {id:'013',name:'钟离',features:'rock'}, {id:'061',name:'烟绯',features:'fire'}, {id:'022',name:'迪奥娜',features:'ice'}, {id:'004',name:'诺艾尔',features:'rock'}, ]}

然后将这个组件引入一个父组件当中:

@Component({  selector:'app-templateoutlet-app-demo',  template:`      `})export class TemplateOutletAppDemoComponent {}

代码运行一下,效果如图:

我觉得这个li的样式实在是太丑了,而且顺序也不太对。我希望把角色属性调到角色名字之前。这样的话,如果只是单纯的通过输入属性来更改样式的话就会变得很麻烦,我们可能需要定义非常多的变量来供使用者选择,这样的话有点得不偿失。那么我们何不直接提供一个模板给使用者,我们只需要提供必要的数据就可以了。样式,排版这些自由交给使用者。

那么对于子组件HeroDisplayCard我们可以这么改:

@Component({  selector:'app-hero-display-card',  template:`    

角色列表

  • 角色id:{{h.id}}-- 角色名字:{{h.name}}-- 角色属性:{{h.features}}

`, styles:[ //省略 ]})export class HeroDisplayCard { @Input() cardItemTemplate:TemplateRef; public heroesList = [ // 省略]}

然后我们在父组件中将自定义的模板传入进去:

@Component({  selector:'app-templateoutlet-app-demo',  template:`                      
  • 角色id:{{id}}

    角色属性:{{features}}

    角色名字:{{name}}

  • `, styles:[ //在这里写自定义模板的样式 `.hero-card-custom-item{ width: 100%; height: 35px; border: 1px solid #999999; border-radius: 5px; display: flex; justify-content:space-around; align-items: center; margin: 10px 0; } .hero-card-custom-item p { width: 30%; margin: 0; font-size: 20px; color: #666666; } .hero-card-custom-item p span { color: red; }` ]})export class TemplateOutletAppDemoComponent {}

    然后运行一下,效果如图(其实还是很丑):

    总结

    使用NgTemplateOutlet这个结构性指令可以增强我们子组件的封装程度,避免需要定义大量的输入属性,导致父组件的模板看起来臃肿不堪。

    上述就是小编为大家分享的Angular中NgTemplateOutlet指令的理解和用法是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

    角色 模板 组件 属性 指令 样式 元素 名字 结构 视图 输入 这样的话 使用者 变量 宿主 结构性 上下 上下文 内容 只是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河北嵌入式软件开发哪家正规 中国现有软件开发人员 如何购买公网对讲机服务器 数据库文件逻辑 云南学软件开发的五年大专学费 数据清单中的阅读是数据库的吗 软件开发心得体会500字 共筑高新区网络安全吗 易语言接口放自己服务器 设计一个新的网络安全协议框架 opc软件开发硬件基础 县城里的网络安全防护 综合管理服务器功能 计算机网络技术第三章习题 服务器远程开机启动 关系数据库操作的特点是集合操作 关系数据库与对象数据库 网吧服务器没有启动成功 英语app软件开发技术 广州分销拓客软件开发 网络安全有几点要注意 如何评估数据库的安全风险 英雄网络安全黑板报 服务器第一块硬盘是系统盘吗 网络安全教育宣传周ppt 数据库如何查询树分支 衡阳游戏软件开发地址 mysql 数据库物理恢复 网络安全课进校园二年级 千峰网络安全笔记网盘下载
    0