0

0

Angular 组件间数据传递:使用 @Input() 详解

花韻仙語

花韻仙語

发布时间:2025-10-03 11:13:01

|

615人浏览过

|

来源于php中文网

原创

angular 组件间数据传递:使用 @input() 详解

本文详细讲解了 Angular 中父组件向子组件传递数据的常用方法——@Input() 装饰器。通过一个图片展示的示例,我们将学习如何在父组件中定义数据,并将其传递到子组件中进行展示,同时避免一些常见的错误,确保数据正确加载和显示。

使用 @Input() 进行数据传递

在 Angular 应用中,组件化是核心概念之一。组件之间经常需要进行数据交互,其中一个常见场景就是父组件向子组件传递数据。@Input() 装饰器是实现这一功能的关键。

示例:图片展示组件

假设我们有一个父组件 AppComponent,它包含一个图片列表 images。我们希望将这些图片数据传递给子组件 CardComponent,并在子组件中展示这些图片。

1. 父组件 (AppComponent)

首先,在 AppComponent 中定义 images 数组:

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent implements OnInit {
  title = 'shopping-cart';

  ngOnInit() {}

  images = [
    {
      title: 'At the beach',
      url: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1173&q=80',
    },
    {
      title: 'At the forest',
      url: 'https://images.unsplash.com/photo-1448375240586-882707db888b?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80',
    },
    {
      title: 'At the City',
      url: 'https://images.unsplash.com/photo-1449824913935-59a10b8d2000?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80',
    },
    {
      title: 'At the Snow',
      url: 'https://images.unsplash.com/photo-1517299321609-52687d1bc55a?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80',
    },
    {
      title: 'At the beach',
      url: 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1173&q=80',
    },
    {
      title: 'At the forest',
      url: 'https://images.unsplash.com/photo-1448375240586-882707db888b?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80',
    },
    {
      title: 'At the City',
      url: 'https://images.unsplash.com/photo-1449824913935-59a10b8d2000?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80',
    },
    {
      title: 'At the Snow',
      url: 'https://images.unsplash.com/photo-1517299321609-52687d1bc55a?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1170&q=80',
    },
  ];
}

接下来,在 AppComponent 的模板文件中,使用 *ngFor 循环遍历 images 数组,并将每个 image 对象传递给 CardComponent:


注意 [image]="image" 这部分,它将父组件的 image 变量绑定到子组件 app-card 的 image 输入属性上。

Android_Intent详解 WORD版
Android_Intent详解 WORD版

本文档主要讲述的是Android_Intent详解;Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的activity

下载

2. 子组件 (CardComponent)

在 CardComponent 中,使用 @Input() 装饰器声明一个输入属性 image,用于接收父组件传递的数据:

import { Component, Input, OnInit } from '@angular/core';

@Component({
  selector: 'app-card',
  templateUrl: './card.component.html',
  styleUrls: ['./card.component.css'],
})
export class CardComponent implements OnInit {
  @Input() image: any = {};

  constructor() {}

  ngOnInit(): void {
    console.log(this.image);
  }
}

@Input() image: any = {} 声明了一个名为 image 的输入属性,类型为 any,并设置了一个默认值空对象 {}。 建议明确指定类型,例如 Image 接口,提高代码可读性和可维护性。

最后,在 CardComponent 的模板文件中,使用 image 属性来展示图片:

@@##@@
{{ image.title }}

关键点:

  • *ngIf="image":在加载 image 数据之前,防止出现错误。
  • [src]="image.url":使用 image.url 来绑定图片的 URL。
  • [alt]="image.title": 使用 image.title 作为图片的 alt 属性,增强可访问性。
  • {{ image.title }}
    : 显示图片的标题。

注意事项

  • 属性命名: @Input() 装饰器后面的属性名(例如 image)应该与父组件模板中绑定的属性名([image])保持一致。
  • 数据类型: 建议为 @Input() 属性指定明确的数据类型,例如接口或类,以提高代码的可读性和可维护性。
  • 默认值: 为 @Input() 属性设置默认值可以避免在数据加载完成之前出现错误。

总结

通过 @Input() 装饰器,我们可以轻松地将数据从父组件传递到子组件。在实际开发中,理解和掌握 @Input() 的使用方法,能够帮助我们构建更加灵活和可维护的 Angular 应用。记住,清晰的属性命名、明确的数据类型和合适的默认值是保证数据传递成功的关键。

Angular 组件间数据传递:使用 @Input() 详解

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

299

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

222

2025.10.31

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1011

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

60

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

370

2025.12.29

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2023.11.24

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

78

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

45

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

118

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.8万人学习

CSS教程
CSS教程

共754课时 | 18.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号