新闻中心
Angular 14 中动态显示与隐藏子组件的实践指南

本文旨在指导 Angular 14 开发者如何在父组件中动态控制子组件的显示与隐藏,尤其是在诸如登录/注册表单切换等场景下。我们将通过一个使用 Bootstrap Offcanvas 组件的示例,演示如何利用 Angular 的数据绑定和条件渲染功能,实现子组件的灵活切换。
在 Angular 应用中,动态显示和隐藏组件是一种常见的需求,尤其是在构建复杂的交互式界面时。例如,在一个侧边栏(Offcanvas)中切换登录和注册表单,或者根据用户的权限显示不同的功能模块。本文将详细介绍如何在 Angular 14 中实现这一功能,并提供一个基
于 Bootstrap Offcanvas 的示例。
使用布尔值控制组件的显示
最简单的方法是使用一个布尔类型的变量来控制组件的显示与隐藏。在父组件中定义一个变量,并在子组件的模板中使用 *ngIf 指令。
例如,在 n*bar.component.ts 中:
import { Component } from '@angular/core';
@Component({
selector: 'app-n*bar',
templateUrl: './n*bar.component.html',
styleUrls: ['./n*bar.component.css']
})
export class N*barComponent {
showLogin = true; // 初始状态显示登录组件
toggleForm(formType: 'login' | 'register') {
this.showLogin = formType === 'login';
}
}在 n*bar.component.html 中:
<n* class="n*bar">
<div class="container-fluid">
<div class="d-flex">
<a href="" class="n*-link" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">Log in</a>
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasRightLabel">
Authentication
</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<app-login *ngIf="showLogin"></app-login>
<app-register *ngIf="!showLogin"></app-register>
</div>
</div>
</div>
</div>
</n*>在 login.component.ts 中,添加一个事件发射器,用于通知父组件切换到注册表单:
import { Component, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent {
@Output() registerClicked = new EventEmitter<void>();
onRegisterClick() {
this.registerClicked.emit();
}
}在 login.component.html 中,添加按钮并绑定事件:
<!-- Offcanvas -->
<div>
<div class="offcanvas-body">
<!-- Form -->
<div>
<form>
<!-- Form inputs and labels-->
<div>
<p> Don't h*e an account? <a (click)="onRegisterClick()" href="#">Register</a></p>
</div>
</form>
</div>
<!-- Form end -->
</div>
<!-- Offcanvas end -->
</div>类似地,在 register.component.ts 中添加一个事件发射器,用于通知父组件切换到登录表单:
察言观数AskTable
企业级AI数据表格智能体平台
78
查看详情
import { Component, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-register',
templateUrl: './register.component.html',
styleUrls: ['./register.component.css']
})
export class RegisterComponent {
@Output() loginClicked = new EventEmitter<void>();
onLoginClick() {
this.loginClicked.emit();
}
}在 register.component.html 中,添加按钮并绑定事件:
<!-- Offcanvas -->
<div>
<div class="offcanvas-body">
<!-- Form -->
<div>
<form>
<!-- Form inputs and labels -->
<div>
<p> Already h*e an account? <a (click)="onLoginClick()" href="#">Log in</a></p>
</div>
</form>
</div>
<!-- Form end -->
</div>
<!-- Offcanvas end -->
</div>最后,在 n*bar.component.html 中,监听子组件的事件,并调用 toggleForm 方法:
<n* class="n*bar">
<div class="container-fluid">
<div class="d-flex">
<a href="" class="n*-link" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">Log in</a>
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasRightLabel">
Authentication
</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<app-login *ngIf="showLogin" (registerClicked)="toggleForm('register')"></app-login>
<app-register *ngIf="!showLogin" (loginClicked)="toggleForm('login')"></app-register>
</div>
</div>
</div>
</div>
</n*>使用枚举类型控制组件的显示
如果需要管理更多的组件状态,可以使用枚举类型来代替布尔值。
例如,在 n*bar.component.ts 中:
import { Component } from '@angular/core';
enum FormType {
Login,
Register
}
@Component({
selector: 'app-n*bar',
templateUrl: './n*bar.component.html',
styleUrls: ['./n*bar.component.css']
})
export class N*barComponent {
formType = FormType.Login; // 初始状态显示登录组件
FormType = FormType; // 暴露给模板使用
setFormType(formType: FormType) {
this.formType = formType;
}
}在 n*bar.component.html 中:
<n* class="n*bar">
<div class="container-fluid">
<div class="d-flex">
<a href="" class="n*-link" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">Log in</a>
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasRightLabel">
Authentication
</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<app-login *ngIf="formType === FormType.Login" (registerClicked)="setFormType(FormType.Register)"></app-login>
<app-register *ngIf="formType === FormType.Register" (loginClicked)="setFormType(FormType.Login)"></app-register>
</div>
</div>
</div>
</div>
</n*>注意事项
- 性能优化: 频繁的组件切换可能会影响性能。如果组件的初始化代价较高,可以考虑使用 ngSwitch 指令,或者将组件缓存起来。
- 代码可读性: 复杂的条件渲染逻辑会降低代码的可读性。建议将复杂的逻辑封装到单独的方法或组件中。
- 数据传递: 如果需要在切换组件时传递数据,可以使用 @Input 和 @Output 装饰器,或者使用 Angular 的服务。
总结
通过本文的介绍,你应该掌握了在 Angular 14 中动态显示和隐藏组件的基本方法。你可以根据自己的实际需求,选择合适的方法来实现组件的切换。记住,代码的可读性和性能是需要重点考虑的因素。 希望本文能够帮助你更好地构建 Angular 应用。
以上就是Angular 14 中动态显示与隐藏子组件的实践指南的详细内容,更多请关注其它相关文章!
# html
# 切换到
# 可以使用
# 单选框
# 是在
# 绑定
# 布尔
# 表单
# 代码可读性
# 注册表
# switch
# ai
# app
# bootstrap
# css
# canva
# 酒吧营销推广找什么客户
# 网站内容如何优化
# 怎样写英文文章网站推广
# 北京天猫网站推广哪家好
# 江门整合营销seo推广机构
# seo meta description
# 福州seo 方喵
# 淘宝seo的步骤
# 广州网站建设公司排名
# 金融网站建设美丽文案
# 自己的
# 显示效果
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
126邮箱手机版登录官网2026_126手机邮箱免费入口最新
Android Studio计算器C键功能异常排查与修复教程
HTML长属性值处理:表单action路径优化与代码规范应对
mc.js免安装版 mc.js一键畅玩入口
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
深入理解Promise链:如何在catch后中断then的执行
qq游戏大厅官方下载_qq游戏免费下载安装入口
斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程
AO3网页版合集入口 Archive of Our Own同人作品浏览指南
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
绝地鸭卫平a核爆刀流玩法攻略
Go语言中Map值调用指针接收器方法的限制与应对
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】
在Go Martini框架中高效服务动态生成图像的实践指南
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
实现分段式页面滚动导航:CSS与J*aScript教程
漫蛙漫画网页端入口 漫蛙2官方正版漫画站点
J*a里如何使用forEach遍历Map_Map遍历方法说明
win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】
Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注
C#中解析不规范的HTML为XML 常见的坑与解决办法
Python实现多节点属性重叠度分析教程
Django通过AJAX异步上传图片并保存至模型的完整指南
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
拼多多赚钱渠道_拼多多收益来源
照顾宝贝2小游戏免费秒玩入口
Node.js中HTML按钮与J*aScript函数交互的正确姿势
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
age动漫网站入口 age动漫官网直接访问入口
Typer应用中动态命令行参数的解析与处理
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
必由学官网首页入口 必由学教师网页版登录指南
Go语言中动态执行代码字符串的策略与实践
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
J*aScript中针对特定容器内图片动画的实现教程
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】
Python多线程中正确使用sigwait处理SIGALRM信号


2025-10-18
浏览次数:次
返回列表