当前位置: 首页 > 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

http://www.lryc.cn/news/271280.html

相关文章:

  • Linux学习笔记(一)
  • Python 爬虫 教程
  • uniapp原生插件 - android原生插件打包流程 ( 避坑指南一)
  • 搭建maven私服
  • EST-100身份证社保卡签批屏按捺终端PC版web版本http协议接口文档,支持web网页开发对接使用
  • 基于SpringBoot的毕业论文管理系统
  • iToF人脸识别
  • Django开发3
  • MS2358:96KHz、24bit 音频 ADC
  • 【Android12】Android Framework系列---tombstone墓碑生成机制
  • 中间件系列 - Redis入门到实战(原理篇)
  • P2249 【深基13.例1】查找
  • linux常用shell脚本
  • Rust学习笔记005:结构体 struct
  • maven中dependencyManagement标签
  • SparkStreaming与Kafka整合
  • openwrt源码编译
  • 【Leetcode Sheet】Weekly Practice 22
  • ROS TF坐标变换 - 静态坐标变换
  • 香橙派5plus从ssd启动Ubuntu
  • JWT+Redis 实现接口 Token 校验
  • C语言 linux文件操作(二)
  • 机器学习分类
  • CSS之元素转换
  • 自激振荡电路笔记 电弧打火机
  • Linux su 命令
  • 论文阅读: AAAI 2022行人重识别方向论文-PFD_Net
  • 蓝牙物联网灯控设计方案
  • Codeforces Round 900 (Div. 3)(A-F)
  • vue大屏-列表自动滚动vue-seamless-scroll