当前位置: 首页 > news >正文

[Angular] 笔记 9:list/detail 页面以及@Output

1. @Output

input 好比重力,向下传递数据,list 传给 detail,smart 组件传给 dumb 组件,父组件传给子组件。input 顾名思义,输入数据给组件。

output 与之相反,好比火箭,向上传递数据或事件。output 顾名思义就是将某些数据发送出去。

在这里插入图片描述

语法:

@Output()
remove: EventEmitter<any> = new EventEmitter();onRemove() {// 通过 emit 关键字向上发送事件this.remove.emit(this.detail);
}

handleRemove 函数里使用了 filter,是为了避免直接修改 state。

在这里插入图片描述

2. 实现删除功能的代码举例

2.1 pokemon-detail.component.html

pokemon-detail.component.html 中增加一个用来删除 Pokemon 的 button:

<tr><td class="pokemon-td" [class.cool-bool]="detail.isCool">{{ detail.id }} : {{ detail.name }}{{ detail.isCool == true ? "is COOL" : "is NOT COOL" }}</td><!-- add a button --><button (click)="onRemove()">Remove Pokemon</button>
</tr>

2.2 pokemon-detail.component.ts

pokemon-detail.component.ts 中增加 @Output, 以及 onRemove

import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Pokemon } from 'src/app/models/pokemon';@Component({selector: 'app-pokemon-detail',templateUrl: './pokemon-detail.component.html',styleUrls: ['./pokemon-detail.component.css'],
})
export class PokemonDetailComponent implements OnInit {@Input()detail!: Pokemon; // 新增代码@Output()remove: EventEmitter<any> = new EventEmitter();constructor() {}ngOnInit(): void {}// 新增代码onRemove() {this.remove.emit(this.detail)}
}

2.3 pokemon-list.component.html

修改 pokemon-list.component.html, 增加 (remove)="handleRemove($event)":

<table><thead><th>Name</th><th>Index</th></thead><tbody><app-pokemon-detail*ngFor="let pokemon of pokemons"[detail]="pokemon"(remove)="handleRemove($event)"></app-pokemon-detail></tbody>
</table>

2.4 pokemon-list.component.ts

在此文件中实现删除功能的相应代码:

import { Component, OnInit } from '@angular/core';
import { Pokemon } from 'src/app/models/pokemon';@Component({selector: 'app-pokemon-list',templateUrl: './pokemon-list.component.html',styleUrls: ['./pokemon-list.component.css'],
})
export class PokemonListComponent implements OnInit {pokemons: Pokemon[] = [// Pokemon: 精灵宝可梦{id: 1,name: 'pikachu', // 皮卡丘type: 'electric',isCool: false,isStylish: true,},{id: 2,name: 'squirtle', // 杰尼龟type: 'water',isCool: true,isStylish: true,},{id: 3,name: 'charmander', // 小火龙type: 'fire',isCool: true,isStylish: false,},];constructor() {}// 新增代码,实现删除功能handleRemove(event: Pokemon) {// 要避免改变 state,这里不能直接删除 pokemons 数组元素,因此使用 filterthis.pokemons = this.pokemons.filter((pokemon: Pokemon) => {return pokemon.id !== event.id;});}ngOnInit(): void {}
}

运行 ng serve, 点击相应 button,可实现删除功能:

在这里插入图片描述


Angular For Beginners

相关文章:

  • mysql使用全文索引+ngram全文解析器进行全文检索
  • 基于SpringBoot的中小型企业质量管理
  • 医院安全(不良)事件报告系统源码 支持二次开发、支持源码交付
  • Postman接口测试工具使用
  • STL——查找算法
  • kubeadm来搭建k8s集群。
  • C++构建简单静态库实例(cmakelist)
  • 【Yii2】数据库查询方法总结
  • 学习体系结构 - AArch64内存管理
  • HTML-基础知识-基本结构,注释,文档说明,字符编码(一)
  • 【Pytorch】学习记录分享8——PyTorch自然语言处理基础-词向量模型Word2Vec
  • 记录一下imx6ull linux 5.10.9多点电容触摸屏驱动报错问题解决方法
  • Python中matplotlib库的使用1
  • 《Spring Cloud学习笔记:微服务保护Sentinel + JMeter快速入门》
  • 【面试题】HTTP 协议中 URI 和 URL 的区别
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • ESLint简单操作
  • github从入门到放弃(1)
  • golang 发送GET和POST示例
  • Java多线程(4):使用线程池执行定时任务
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Js基础——数据类型之Null和Undefined
  • Linux快速复制或删除大量小文件
  • Median of Two Sorted Arrays
  • mysql常用命令汇总
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Python 反序列化安全问题(二)
  • Python_网络编程
  • vuex 笔记整理
  • 二维平面内的碰撞检测【一】
  • 回流、重绘及其优化
  • 将 Measurements 和 Units 应用到物理学
  • 力扣(LeetCode)357
  • 前端js -- this指向总结。
  • 浅谈web中前端模板引擎的使用
  • 深度学习入门:10门免费线上课程推荐
  • 世界上最简单的无等待算法(getAndIncrement)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 详解NodeJs流之一
  • 追踪解析 FutureTask 源码
  • 你对linux中grep命令知道多少?
  • 2017年360最后一道编程题
  • linux 淘宝开源监控工具tsar
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • (06)金属布线——为半导体注入生命的连接
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matlab)使用竞争神经网络实现数据聚类
  • (九)c52学习之旅-定时器
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (转)一些感悟
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • *p++,*(p++),*++p,(*p)++区别?