首页 > 其他分享 >Angular系列 -> 父子传值

Angular系列 -> 父子传值

时间:2023-04-22 16:47:26浏览次数:35  
标签:parent component event 父子 child 组件 message Angular 传值

1. parent to child: 

parent: 

<app-child [childMessage]="parentMessage"></app-child>

child:

@Input() childMessage: string;

2. child to parent:

@ViewChild : 使父组件可以获取到子组件的属性和功能;但是,子组件直到视图初始化完成后才可用,这就意味着我们需要在AfterViewInit 生命钩子中获取来自子组件的数据;

3. child to parent: 

@Output() and EventEmitter 

另一种在父子组件共享数据的方式是,从子组件发送数据,由父组件进行监听。这种方法适用的场景,主要发生在像button 点击或其他的用户事件, 需要共享数据的变化这种情况下;

parent:

创建一个方法去接收来自子组件的数据,无论什么时候事件发生,都会触发这个接收数据的方法;

import { Component } from '@angular/core';

@Component({
  selector: 'app-parent',
  template: `
    Message: {{message}}
    <app-child (messageEvent)="receiveMessage($event)"></app-child>
  `,
  styleUrls: ['./parent.component.css']
})
export class ParentComponent {

  constructor() { }

  message:string;

  receiveMessage($event) {
    this.message = $event
  }
}

child: 
用@Output()装饰器来声明一个变量,类型为 event emiter; 创建一个方法,发送带有message 数据(或我们想要发送的数据)的event,调用emit() 方法;然后创建个button 去触发这个创建的方法;

import { Component, Output, EventEmitter } from '@angular/core';

@Component({
  selector: 'app-child',
  template: `
      <button (click)="sendMessage()">Send Message</button>
  `,
  styleUrls: ['./child.component.css']
})
export class ChildComponent {

  message: string = "Hola Mundo!"

  @Output() messageEvent = new EventEmitter<string>();

  constructor() { }

  sendMessage() {
    this.messageEvent.emit(this.message)
  }
}

4. shared service from different component

假如传递数据的组件没有直接的关系,我们可以用到 RxJS BehaviorSubject 。

  • It will always return the current value on subscription - there is no need to call onnext
  • It has a getValue() function to extract the last value as raw data.
  • It ensures that the component always receives the most recent data.

 例如: 创建一个公用的service,在service里创建一个BehaviorSubject,在需要获取此值的组件中订阅它,如果有新的值出现,则它就会自动广播(broadcast)到其他订阅的组件中。

 

剪藏链接:

标签:parent,component,event,父子,child,组件,message,Angular,传值
From: https://www.cnblogs.com/z7luv/p/15672569.html

相关文章

  • uni-app 页面传值 tabbar切换
    场景:tabbar页面是展示一个列表,页面中有一个搜索按钮,点击按钮进入搜索页面,输入字段以后返回tabbar页面展示相应的搜索结果,切换tabbar页面后搜索条件置空 方案1:使用navigateTo跳转传值坑1:因为搜索页要跳转的是tabbar页面,不能直接使用navigateTo跳转,只能使用switchTab,但是switc......
  • jq中使用ajax传值到后台
    <script>functiononSubmitPlus(issave){varprojectid=$("#field_40282aa18708cb1301871197556b011b").val();varprojectmgrdep=$("#field_40282aa18708cb1301871196a1a70118").val();//项目负责人的所属部门//varoldpr......
  • vue往组件中传值,值在组件内如何实现修改
    Vuewarn]:Avoidmutatingapropdirectlysincethevaluewillbeoverwrittenwhenevertheparentcomponentre-renders.Instead,useadataorcomputedpropertybasedontheprop'svalue.Propbeingmutated:"type"这是Vue的一个警告提示,意思是应该避免直......
  • angular项目国际化yaml自定义配置(ngx-translate)
    angular国际化配置很简单,但是想不用json文件用yaml文件,并且同一语言分label.jp.yaml和message.jp.yaml两个文件分开管理。1、下载ngx-translate的依赖库npminstall@ngx-translate/core--savenpminstall@ngx-translate/http-loader--save2、app.module.ts 中引入TranslateMo......
  • ES6 拼接字符串(angular)
    angular 拼接字符串有没有什么好办法呢,发现es6可以。拼接方式:用反引号(`)包裹起来特点:模板中的内容可以有格式并可以定义多行通过${}方式填充数据大括号里面可以进行运算和调用函数例子: //例1constcontent1='helloboys!';this.message=`helloworld!${content1}`;//......
  • angular开发从入门到入土第二节(组件通信)
    一.input和output1.子组件通过@Input装饰器获取到父组件传递的值//子组件html模板<p>child</p><div>{{showText}}</div>子组件类import{ChangeDetectionStrategy,Component,Input}from'@angular/core';@Component({selector:'app-my-co......
  • vue3 父子组件共享响应式对象
    父组件<templatelang=""><div><divclass="greetings">按钮值:{{num}}</div><div><button@click="num++">按钮</button></div><div>iamparent</div&......
  • Angular 复习与进阶系列 – Component 组件 の Lifecycle Hooks
    前言我们在这篇和 这篇中已经学习了几个基本的LifecycleHooks.分别是constructorOnInitAfterContentInitAfterViewInitOnDestroyOnChanges这篇我们会把其余的LifecycleHooks都学完. InitGroupandChangesGroupAngular的Lifecycle可以分为两组.第一组......
  • AngularJS 输入验证
      属性描述$dirty表单有填写记录$valid字段内容合法的$invalid字段内容是非法的$pristine表单没有填写记录......
  • AngularJS 动画
    ngAnimate做了什么?ngAnimate模型可以添加或移除class。ngAnimate模型并不能使HTML元素产生动画,但是ngAnimate会监测事件,类似隐藏显示HTML元素,如果事件发生ngAnimate就会使用预定义的class来设置HTML元素的动画。AngularJS添加/移除class的指令:ng-s......