angular12父子组件通信的三种方法

在Angular中,父组件可以通过输入属性(@Input)来传递数据给子组件,但是不能直接修改子组件内部的变量,尤其是如果这些变量不是通过输入属性传递的。这是因为在Angular中,子组件的内部状态应该由子组件自己管理和控制,父组件应该通过输入属性来影响子组件的状态,而不是直接修改它的内部变量。

1.输入属性(@Input)和输出属性(@Output)组合

  • 父组件可以通过输入属性向子组件传递数据。
  • 子组件可以通过输出属性触发事件,将变化通知给父组件
// 在父组件中
<app-child [inputData]="parentData" (outputEvent)="handleEvent($event)"></app-child>// 在子组件中
@Input() inputData: any;
@Output() outputEvent: EventEmitter<any> = new EventEmitter<any>();// 发送事件
this.outputEvent.emit(someData);

2.服务(Service)的使用

        父组件和子组件可以共享一个服务,通过服务来管理共享状态或者进行通信

// 在服务中定义共享数据或者通信方法
@Injectable({providedIn: 'root'
})
export class DataService {private sharedData = new BehaviorSubject<any>(null);sharedData$ = this.sharedData.asObservable();updateData(data: any) {this.sharedData.next(data);}
}// 在父组件中
constructor(private dataService: DataService) {}updateChildData() {this.dataService.updateData(newData);
}// 在子组件中
constructor(private dataService: DataService) {this.dataService.sharedData$.subscribe(data => {// 处理接收到的数据});
}

3.ViewChild 和 ContentChild

  • 使用ViewChild或者ContentChild可以在父组件中获取子组件的引用,并通过这个引用访问子组件的属性和方法。但是这种方法需要谨慎使用,以避免破坏组件的封装性和可维护性
1. 获取对子组件的引用import { Component, ViewChild } from '@angular/core';
import { ChildComponent } from './child.component';@Component({selector: 'parent-component',template: `<child-component></child-component>`
})
export class ParentComponent {@ViewChild(ChildComponent) childComponent!: ChildComponent;ngAfterViewInit() {// 可以在这里访问子组件的属性和方法this.childComponent.childMethod();}
}2. 获取对多个子组件或指令的引用import { Component, ViewChildren, QueryList } from '@angular/core';
import { ItemComponent } from './item.component';@Component({selector: 'parent-component',template: `<item-component></item-component><item-component></item-component>`
})
export class ParentComponent {@ViewChildren(ItemComponent) itemComponents!: QueryList<ItemComponent>;ngAfterViewInit() {// 可以通过 QueryList 迭代访问每个子组件this.itemComponents.forEach(item => {console.log(item);});}
}3. 获取对DOM元素的引用, 有时候需要直接访问HTML元素,可以通过设置 read 选项为 ElementRef:import { Component, ViewChild, ElementRef } from '@angular/core';@Component({selector: 'parent-component',template: `<div #myDiv>Some content</div>`
})
export class ParentComponent {@ViewChild('myDiv', { static: true, read: ElementRef }) myDiv!: ElementRef;ngAfterViewInit() {// 可以通过 nativeElement 访问原生DOM元素console.log(this.myDiv.nativeElement);}
}
  • 默认情况下,@ViewChild 在 ngAfterViewInit() 生命周期钩子之后才会设置子组件或DOM元素的引用。你可以通过 { static: true } 选项来设置在 ngOnInit() 之前就获取引用,但这样做可能会导致在某些情况下引用为 undefined,具体取决于引用的元素何时可用。

总结来说,Angular推荐的方式是通过输入属性和输出属性进行父子组件之间的通信,以及使用服务来管理共享状态。直接修改子组件内部的变量是不推荐的,因为这会破坏组件的封装性和复用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7zip安装后压缩包图标显示空白解决办法

记录安装7zip软件后&#xff0c;出现了如下的图标是空白的问题: &#xff08;虽然我最终解决了但是我不确定是哪一步起的作用&#xff0c;但是我也懒得再情景复现了。&#xff09; 我的解决过程是&#xff1a; 在开始菜单栏搜索“7zip ”然后点击“打开。 然后点击 &#xf…

Android Service学习笔记

1、Service介绍 Android Service&#xff08;服务&#xff09;是 Android 四大组件之一&#xff0c;主要作用是执行后台操作。它是一个后台运行的组件&#xff0c;执行长时间运行且不需要用户交互的任务。即使应用被销毁也依然可以工作。 Service并不是运行在一个独立的进程当…

【送模板】5张图,帮你轻松搞懂OKR工作法

OKR是目标与关键结果法的缩写&#xff0c;OKR运用在工作中就是强调对业务进行逻辑思考&#xff0c;找到目标与关键结果之间的因果关系。这种因果关系的是否准确决定我们努力的价值。 OKR是一种高效的目标管理方法。“O”就是object&#xff0c;目标的意思&#xff0c;“kr”就…

81600B keysight 是德 可调谐激光源 简述

KEYSIGHT 81600B 是可调谐激光源模块&#xff0c;广泛应用于光通信和光学测试领域。该系列产品通过低自发源发射&#xff08;low SSE&#xff09;技术实现了高信噪比&#xff08;>70 dB/nm&#xff09;&#xff0c;并具有快速准确的扫描能力&#xff0c;覆盖1260 nm至1640 n…

2024 年 Python 基于 Kimi 智能助手 Moonshot Ai 模型搭建微信机器人(更新中)

注册 Kimi 开放平台 Kimi&#xff1a;https://www.moonshot.cn/ Kimi智能助手是北京月之暗面科技有限公司&#xff08;Moonshot AI&#xff09;于2023年10月9日推出的一款人工智能助手&#xff0c;主要为用户提供高效、便捷的信息服务。它具备多项强大功能&#xff0c;包括多…

大模型 舆情分析 数据构造 prompt提示词 经验分享 数据准备

最近在做舆情分析&#xff0c;需要执行比较复杂的任务流程&#xff08;例如同时执行人名识别、相关机构识别、90分类&#xff09;&#xff0c;传统Bert无法胜任&#xff0c;因此尝试使用大模型进行处理。 下面的一些提示词是我用来准备数据的&#xff0c;这些数据可以按照不同…

flutter 导出iOS问题3

更新flutter版本后 macminihaomacMiniaodeMini SocialIM % flutter --version Flutter 3.7.12 • channel stable • https://github.com/flutter/flutter.git Framework • revision 4d9e56e694 (1 year, 2 months ago) • 2023-04-17 21:47:46 -0400 Engine • revision 1a6…

MDPO:Conditional Preference Optimization for Multimodal Large Language Models

MDPO: Conditional Preference Optimization for Multimodal Large Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;多模态、大型语言模型、偏好优化、条件偏好优化、幻觉减少 摘要 直接偏好优化&#xff08;DPO&#xff09;已被证明是大型语言模型&#xff08…

什么是“基准测试集”呢?

基准测试集有三部分构成&#xff1a;DocumentSet、QuerySet、RelevantJudgement。在比较多个IR系统孰优孰劣的时候&#xff0c;要做的就是&#xff1a;使用统一的DecumentSet建立索引&#xff0c;然后使用统一的QuerySet去进行查询&#xff0c;最后使用统一的judgement进行评判…

OpenAI新模型发布,免费开放GPT-4o!但只开放一点点...

GPT-4o 中的“o”代表“omni”——指的是 GPT-4o 的多模态。 该模型将向免费客户开放&#xff0c;这意味着任何人都可以通过 ChatGPT 访问 OpenAI 最先进的技术。 GPT-4o 是 OpenAI 昨天晚上发布的新旗舰模型&#xff0c;可以实时推理音频、视觉和文本。 据官方介绍&#xff0…

编写C语言程序解决多个数学问题及修正斐波那契数列递归函数

目录 请按下列要求编写程序&#xff1a;(三个函数均在一个C语言源程序) 有一个四位整数&#xff0c;它的9倍恰好是其反序数&#xff08;反序数例&#xff1a;1234与4321互为反序数&#xff09;。 有3个非零十进制数字&#xff0c;用它们可以组合出6个不同的三位数&#xff0…

通过阿里云OOS定时升级Redis实例临时带宽

功能背景 在数据驱动的现代业务环境中&#xff0c;Redis以其卓越的性能和灵活性&#xff0c;已成为众多企业关键基础设施的重要组成部分。Redis广泛应用于处理缓存、会话管理、消息队列等多种数据密集型和响应敏感型的场景&#xff0c;对业务连续性和用户体验贡献极大。然而&a…

如何用Vue3构建一个交互式树状图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue 3 ApexCharts Treemap 组件&#xff1a;可视化多维数据 应用场景 树形图&#xff08;Treemap&#xff09;是一种可视化多维数据的有效方式&#xff0c;特别适用于展示层次结构数据或按类别分组的数据。它…

AI工具对音乐的不良影响

AI工具对音乐的不良影响主要体现在以下几个方面&#xff1a; 一、加剧音乐行业的竞争 门槛降低&#xff1a;由于AI工具可以更容易地生成音乐作品&#xff0c;这降低了音乐制作的门槛&#xff0c;使得更多的人能够参与到音乐创作中来。这虽然增加了音乐创作的多样性&#xff0…

Webmin在EPICS IOC启动中的应用

本文使用webmin启动远程工控机中的EPICS IOC&#xff0c;受控设备使用PI公司的六轴台以及相应的控制器C-887&#xff1a; 1&#xff09;控制器C-887 2) 六轴台&#xff1a; 3&#xff09;在工控机上安装用于与C-887控制器进行通信的EPICS IOC程序&#xff0c;安装结束后&#…

【DBA早下班系列】—— 并行SQL/慢SQL 问题该如何高效收集诊断信息

1. 前言 OceanBase论坛问答区或者提交工单支持的时候大部分时间都浪费在了诊断信息的获取交互上&#xff0c;今天我就其中大家比较头疼的SQL问题&#xff0c;给大家讲解一下如何一键收集并行SQL/慢SQL所需要的诊断信息&#xff0c;减少沟通成本&#xff0c;让大家早下班。 2. …

【杂记-浅谈OSPF协议中的RouterDeadInterval】

一、RouterDeadInterval概述 RouterDeadInterval&#xff0c;即路由器死区间隔&#xff0c;它涉及到路由器如何在广播网络上发现和维护邻居关系。RouterDeadInterval指的是在广播网络中&#xff0c;路由器在多长时间内没有收到邻居路由器的Hello报文后&#xff0c;会将邻居路由…

Python网络爬虫4-实战爬取pdf

1.需求背景 爬取松产品中心网站下的家电说明书。这里以冰箱为例&#xff1a;松下电器-冰箱网址 网站分析&#xff1a; 第一步&#xff1a; 点击一个具体的冰箱型号&#xff0c;点击了解更多&#xff0c;会打开此型号电器的详情页面。 第二步&#xff1a;在新打开的详情页面中…

小抄 20240612

1 很多问题都有人经历过&#xff0c;都交出过自己的答卷&#xff0c;遇到自己无法解决的问题的时候&#xff0c;可以找找别人给出过的参考答案。 2 和人发生矛盾&#xff0c;尽量就事论事&#xff0c;把道理和逻辑说透&#xff0c;关系还在。 千万不要靠情绪解决问题&#x…

docker安装使用

文章目录 docker产生的原因传统虚拟机容器化技术 docker组成安装docker镜像加速docker安装过程中遇到的问题以及解决办法Errors during downloading metadata for repository root_:Failed to set locale, defaulting to C.UTF-8 docker产生的原因 传统虚拟机 在不使用docker…