为什么子组件接收到的modalRef是来自于父组件属性的引用?,@Input() modalRef: NzModalRef;

发布时间:2024年01月15日

子组件接收到的?modalRef?是来自于父组件属性的引用。通过使用?@Input() modalRef: NzModalRef;?装饰器将?modalRef?声明为子组件的输入属性,可以让父组件传递模态框的引用给子组件。

在父组件中,当创建模态框并获得模态框引用后,通过将其赋值给子组件的?modalRef?属性,将模态框引用传递给子组件:

sendMessage() {
  const modal = this.modalService.create({
    // 模态框配置...
  });

  this.modalRef = modal;
}

然后,在子组件中,通过使用?@Input()?装饰器将?modalRef?声明为一个输入属性,以接收来自父组件的模态框引用:

import { Component, Input } from '@angular/core';
import { NzModalRef } from 'ng-zorro-antd/modal';

@Component({
  selector: 'app-child-component',
  templateUrl: './child-component.component.html',
  styleUrls: ['./child-component.component.css']
})
export class ChildComponent {
  @Input() modalRef: NzModalRef;

  // 子组件可以使用父组件传递的 modalRef 引用进行操作
  closeModal() {
    this.modalRef.close();
  }
}

这样,父组件中创建的模态框引用就可以通过?modalRef?输入属性传递给子组件,并且子组件可以使用该引用来进行操作,如关闭模态框。

对于基本类型(如字符串)@Input()?装饰器将创建一个属性,该属性会接收父组件传递的值的副本,而不是引用。

为什么对基本类型产生的是副本,而复杂类型产生的是引用?

这是因为在 JavaScript/TypeScript 中,基本类型(如字符串、数字、布尔值等)是通过值传递的,而复杂类型(如对象、数组等)是通过引用传递的。

当使用?@Input()?装饰器将一个基本类型属性传递给子组件时,实际上会创建该属性的副本,并将副本的值传递给子组件。这意味着子组件中对该属性的修改不会影响原始值。

对于复杂类型,如对象或数组,它们是通过引用传递的。因此,当使用?@Input()?装饰器将一个复杂类型属性传递给子组件时,实际上传递的是对该属性的引用。这意味着子组件中对该属性的修改会影响到原始值。

文章来源:https://blog.csdn.net/dongnihao/article/details/135606804
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。