【Angular教程 230106】03 Angular事件、表单事件、事件对象、双向数据绑定

Angular教程 230106#快捷

04 Angular事件、表单事件、事件对象、双向数据绑定(45分)

0 一些基础的概念

1 执行事件 (click)=”getData()”

执行事件 angular

在 Angular 中,“执行事件”通常指的是当一个特定的事件发生时触发的一系列动作或函数。Angular 作为一个前端框架,提供了丰富的事件绑定功能,让开发者可以轻松地在 HTML 模板中处理用户的交互动作,如点击、滚动、键盘输入等。

下面是一些 Angular 中常见的事件执行方式的例子:

1. 点击事件(Click Event):

使用 (click) 属性来绑定点击事件。当用户点击一个元素时,可以触发一个函数或表达式。
html

<button (click)=“doSomething()”>Click me

2. 双击事件(Double Click Event):

使用 (dblclick) 来绑定双击事件。
html

3. 键盘事件(Keyboard Events):

比如 (keyup) 和 (keydown) 可以用来在用户按键时触发事件。
html

<input (keyup)=“onKeyUp($event)” />

4. 鼠标事件(Mouse Events):

如 (mouseover) 和 (mouseout) 可用于处理鼠标悬停事件。
html

5. 表单事件(Form Events):

比如 (ngSubmit) 用于处理表单提交。
html

在这些事件中,可以调用组件类中定义的方法,或者直接在模板中编写简单的表达式来处理事件。Angular 还提供了 $event 对象,它代表了事件的数据,可以在事件处理函数中使用它来获取更多的上下文信息。

一个详细的
<h3>我是一个首页组件home
</h3>
<h3>事件</h3>
<!-- <button (click)="run">点击触发run方法</button>  -->
<h4>1 . 执行自定义方法 </h4>
<p>[click点击触发run()]</p><button (click)="run()">触发run方法</button> <p>[dblclick双击触发run()]</p><button (dblclick)="run()">触发run()方法</button>
<hr>
<!-- 绑定一个点击事件到一个方法时,你需要确保方法名后面有括号 (),这表示调用该方法。 -->
<p>数据:</p>{{sweetGirl}}<h4>2 . 执行自定义方法来获取数据 </h4>
<button (click)="getData()">执行getData()方法获取数据:一个小美女</button>
<h4>3 . 执行自定义方法来改变属性里面的数据 </h4><button (click)="setData()">我是一个改变后的小美女 </button><h3> 表单事件 事件对象</h3>
<h4>1  <br> 以下这段代码展示了如何在Angular组件中处理键盘事件。<br>当用户在输入框中按键时,myKeyDown方法会被调用。<br>该方法检查输入框中的文本(加上刚按的键)是否包含特定的字符串(在这个例子中是“ZYY”)。<br>如果包含,它会弹出一个警告消息,并清空输入框,允许用户开始新的输入。
</h4>
<!-- 在HTML模板中,我们有一个输入框。当用户按下键盘上的任何键时,将触发myKeyDown事件处理器。 -->
<input type="text" (keydown)="myKeyDown($event)"><h4>2 动态显示 :变量的值设置为目标此处为input这个html框,这个输入元素的当前值,加上刚刚按下的键的值。 </h4>
<input type="text" (keydown)="mwyKeyDownAllInput($event)">
{{showKeyDownAllInput}}<h4>3 键位keycode检测 :<input type="text" (keydown)="mwyKeyDownKeyCode($event)"></h4>
import { Component, OnInit } from '@angular/core';
@Component({selector: 'app-home',templateUrl: './home.component.html',styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {ngOnInit(): void {}run() {alert("点击后,执行了run()方法")}public sweetGirl: string = "一个小美女";getData() {alert("获取了:" + this.sweetGirl);}setData() {this.sweetGirl = "我是一个setData() 改变后的小美女";}/*** * * 以下这段代码展示了如何在Angular组件中处理键盘事件。当用户在输入框中按键时,myKeyDown方法会被调用。该方法检查输入框中的文本(加上刚按的键)是否包含特定的字符串(在这个例子中是“ZYY”)。如果包含,它会弹出一个警告消息,并清空输入框,允许用户开始新的输入。Z* @param event * */// myKeyDown方法是在用户按下键盘时被调用的事件处理器myKeyDown(event: KeyboardEvent) {/* 获取当前输入框的值,并将新按下的键值附加到该字符串event: KeyboardEvent:这里,event是一个包含了按键事件信息的对象。KeyboardEvent是它的类型,意味着这个对象包含了关于键盘事件的所有信息。 */const inputValue = (event.target as HTMLInputElement).value + event.key;/* 这一部分获取了引发事件的元素的当前值。我们分解来看:1)event.target代表触发事件的元素,在这里是<input>元素,这是事件对象的一个属性,它指向触发事件的元素,在这个例子中是文本输入框。2)event.key表示刚刚被按下的那个键的值,event.target as HTMLInputElement:这个部分是类型断言。它告诉TypeScript,“我们知道event.target是一个HTML的输入元素(即文本框)”,这样我们就可以访问这个输入框的特定属性了。3).value:这是输入框的一个属性,它表示输入框里当前的文本。*//* + event.key;event.key:这是另一个属性,它表示刚刚被按下的那个键的值。+:这个符号在这里表示字符串拼接。它把输入框里的当前文本(.value)和刚刚按下的键的值(event.key)拼接在一起。所以,myKeyDown函数中的这行代码的意思是:“获取当前输入框里的文本,然后加上刚刚按下的那个键的值。” 这样我们就可以知道在按下这个键之后,输入框里会是什么文本了。*/// 检查输入的字符串是否包含特定的子串“ZYY”if (inputValue.includes('ZYY')) {// 如果包含,弹出一个警告框alert('欢迎主人');// 清空输入框,以便用户可以输入新的文本// 这里将输入框的值设置为空字符串(event.target as HTMLInputElement).value = '';}}//----------结束---------------public showKeyDownAllInput: string = "";// 定义了一个名为showKeyDownAllInput的公共变量,类型是字符串。// 这个变量用于存储和展示按键的结果。// 初始值设置为空字符串""。// 定义了一个名为mwyKeyDownAllInput的方法,用于处理键盘按键事件。// 它接收一个参数e,类型为any(任意类型)。// 这意味着e可以是任何类型的数据,这在这里是用来表示键盘事件的对象。mwyKeyDownAllInput(e: any) {// 在控制台打印事件对象e。// 这通常用于调试目的,以便了解事件对象包含的信息。console.log(e);// 将showKeyDownAllInput变量的值设置为目标此处为input这个html框,这个输入元素的当前值,加上刚刚按下的键的值。// e.target是引发事件的元素,这里转换为HTMLInputElement类型来获取其value属性。// e.key是刚刚被按下的键的值。this.showKeyDownAllInput = (e.target as HTMLInputElement).value + e.key;}//mwyKeyDownKeyCodemwyKeyDownKeyCode(ev: any) {if (ev.keyCode == 13) {console.log("检测到ev.keyCode==13,刚才是按了一下回车");} else  {console.log(ev.target.value);}}
}
img{max-width: 40px;
}
.redStyle {color: red;}.blueStyle{color: blue;}.orangeStyle{color: orange;}

keyDown

<input type=“text” (keydown)=“keyDown($event)” />


keyUp:

<input type=“text” (keyup)=“keyUp($event)” />

6 使用事件操作dom元素
 changecolor(e:any){var myDom = e.target;myDom.style.color=`red`;
}

}

<button (click)=“changecolor($event)”>点击按钮变成红色1

2 双向数据绑定(只针对于表单)

双向绑定是一个核心特性,用于建立视图(HTML 模板)和组件(TypeScript 类)之间的动态通信。Angular 的双向绑定主要通过 [(ngModel)] 指令实现。

1以下是一个简单的 Angular 双向绑定的例子:

HTML 模板部分
在 HTML 模板中,你可能会有一个输入框(input element),并使用 [(ngModel)] 指令来绑定一个组件属性:

Copy code
<input [(ngModel)]="userName">

这里,userName 是你的 Angular 组件中的一个属性。

TypeScript 组件部分
在对应的 TypeScript 文件中,你会定义一个与之相绑定的属性:

Copy code
export class AppComponent {userName: string = '';
}

在这个例子中,userName 属性与输入框绑定。当用户在输入框中输入内容时,userName 属性的值会实时更新,反之亦然。

2双向绑定的工作原理

从视图到模型:当用户在输入框中输入内容时,ngModel 指令捕获这些更改并更新组件类中的 userName 属性。
从模型到视图:当 userName 属性的值在 TypeScript 代码中被更改时(比如通过某些逻辑或从服务获取数据),这个新值会自动反映在绑定的 HTML 输入框中。
注意事项
为了使用 ngModel,你需要在你的 Angular 模块中导入 FormsModule:

typescript
Copy code
import { FormsModule } from ‘@angular/forms’;

@NgModule({
imports: [
// … 其他模块
FormsModule
],
// …
})
export class AppModule { }

3意义

双向绑定使得数据在用户界面数据模型之间的同步变得简单高效。在用户界面上的任何更改都会即时地反映到应用程序的数据模型中,反之亦然。这大大简化了交互式应用程序的开发。

 先在app.module.ts导入模块import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';import { FormsModule } from '@angular/forms';// 导入模块import { AppComponent } from './app.component';
import { NewsComponent } from './components/news/news.component';
import { HeaderComponent } from './components/header/header.component';
import { HomeComponent } from './components/home/home.component';@NgModule({declarations: [AppComponent, NewsComponent, HeaderComponent, HomeComponent],imports: [BrowserModule, FormsModule],// 导入模块providers: [],bootstrap: [AppComponent],
})
export class AppModule {}定义数据public keywords: string;双向绑定<h1>双向数据绑定--MVVM 只是针对表单</h1>
<input type="text" [(ngModel)]="keywords">
{{keywords}}定义方法操作值changeKeywords() {this.keywords = '我是改变后的值';}getKeywords() {alert(this.keywords);}重写测试<h1>双向数据绑定--MVVM 只是针对表单</h1>
<input type="text" [(ngModel)]="keywords">
{{keywords}}
<br>
<button (click)="changeKeywords()">改变keywords的值</button>
<button (click)="getKeywords()">获取keywords的值</button>//------changecolor(e:any){var myDom = e.target;myDom.style.color=`red`;}
}
//--html
<button (click)="changecolor($event)">点击按钮变成红色</button>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web学习笔记(十三)

目录 1.for循环 1.1格式&#xff1a; 1.2执行步骤&#xff1a; 1.3补充&#xff1a; 2. while循环和do-while循环 2.1格式&#xff1a; 补充断点调试&#xff1a; 补充穷举法&#xff1a; 1.for循环 1.1格式&#xff1a; for(变量初始化&#xff1b;判断条件&#xff1…

L1-005 考试座位号(Java)

题目 每个 PAT 考生在参加考试时都会被分配两个座位号&#xff0c;一个是试机座位&#xff0c;一个是考试座位。正常情况下&#xff0c;考生在入场时先得到试机座位号码&#xff0c;入座进入试机状态后&#xff0c;系统会显示该考生的考试座位号码&#xff0c;考试时考生需要换…

Ansys Zemax | 如何使用 ZPL 创建用户自定义求解

附件下载 联系工作人员获取附件 本文使用两个示例演示了如何使用 ZPL 创建用户自定义解。第一个示例介绍了如何创建 ZPL 解以确保序列文件中像面的曲率半径等于系统的 Petzval 曲率。第二个示例介绍了如何在非序列元件编辑器 ( Non-Sequential Component Editor ) 中基于其他…

含中间直流的三相电力电子变压器PET仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 背景&#xff1a; 目前高压电网中应用的绝大多数电力变压器都属于传 统电力变压器&#xff0c;传统变压器的优势在于工艺简单、安全性 较强。但传统变压器本身的弊端也非常突出&#xff0c;占地大、重 量大&…

从虚拟到现实:数字孪生驱动智慧城市可持续发展

随着科技的飞速发展&#xff0c;智慧城市已经成为未来城市发展的重要趋势。数字孪生技术作为智慧城市建设中的关键技术之一&#xff0c;正在发挥着越来越重要的作用。本文将探讨数字孪生如何从虚拟走向现实&#xff0c;驱动智慧城市的可持续发展。 一、数字孪生技术&#xff1…

【Vue3】2-6 : 计算属性与侦听器区别与原理(一)

本书目录&#xff1a;点击进入 一、计算属性 - computed:{} 1.1 目的 1.2 写法 代码 二、特征 2.1 调用时当属性调用 2.2 缓存 2.3 默认只读 2.4 可赋值&#xff1a;需要定义成对象&#xff0c;并写get&#xff0c;set方法 &#xff08;类似于java&#xff09; 三、原…

tryhackme--Command Injection(命令注入)

查看应用程序在哪个用户下运行。 任务1 简介&#xff08;什么是命令注入&#xff1f;&#xff09; 命令注入是滥用应用程序的行为&#xff0c;使用与设备上运行的应用程序相同的权限在操作系统上执行命令。例如&#xff0c;在以名为joe的用户身份运行的 Web 服务器上实现命令…

多层感知机(Multilayer Perceptron,MLP)

什么是机器学习 多层感知机&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;是一种前馈神经网络&#xff0c;由输入层、多个隐藏层和输出层组成。MLP是一种强大的非线性模型&#xff0c;可以用于解决分类和回归问题。它通过学习适当的权重和偏置来映射输入到输出…

4.2 MATRIX MULTIPLICATION

矩阵-矩阵乘法&#xff0c;或简称矩阵乘法&#xff0c;在 i X j&#xff08;i 行 by j 列&#xff09;矩阵 M 和 j x k 矩阵 N 之间产生 i X k 矩阵P。矩阵乘法是基本线性代数子程序&#xff08;BLAS&#xff09;标准的重要组成部分&#xff08;见第3章中的“线性代数函数”边栏…

gazebo安装版本--公元2024年1月

不好意思我误导了各位&#xff0c;顺便也误导了我自己。。。。。。。。。 harmonic版本只适合单独使用&#xff0c;不适合与ros2配合仿真。 到2024年1月&#xff0c;只有fortress版本能与ros2配合使用

如何将 element-ui 中的 el-select 默认展开

<el-form-item label"藕粉桂花糖糕" prop"state" required><el-selectref"mySelect"v-model"form.state"style"width: 280px"placeholder"请选择"><el-option label"藕粉" :value"…

深信服防火墙转发到远端天融信防火墙内网应用卡顿问题解决

背景&#xff1a; 原来是天融信VPN&#xff0d;天融信VPN 做了一个内网应用NAT转发&#xff0c;用了多年应用都是正常的。近期一端改成了深信服务防火墙&#xff0c;用户反馈应用不正常&#xff0c;出现卡顿或直接不能访问&#xff0c;但涮新多次又可以访问。 解决&#xff1a…

Bito智能辅助编程体验报告

Bito智能辅助编程体验报告 1 Bito 能够为我们做些什么事&#xff1f; 号称 IDE 的“瑞士军刀”&#xff0c;可以提升开发 10 倍的效率; 生成代码&#xff1a;要求 Bito 使用自然语言提示生成任何语言的代码。&#xff08;例如&#xff0c;编写一个 Java 函数将数字从一种基数转…

MySQL:报错this is incompatible with sql_mode=only_full_group_by

在mysql 工具 搜索或者插入数据时报下面错误&#xff1a; ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column database_tl.emp.id which is not functionally dependent on columns in GROUP BY clause; this is…

力扣188. 买卖股票的最佳时机 IV

动态规划 思路&#xff1a; 状态定义 假设 buy[i][j] 是第 i 天进行第 j 笔交易&#xff0c;手上还买入一支股票的最大利润&#xff1b;sell[i][j] 是第 i 天进行第 j 笔交易的最大利润&#xff1b;状态转移&#xff1a; 第 i 天进行第 j 笔交易&#xff0c;手上还买入一支股票…

C语言PDF编程书籍下载

[C.Primer.Plus&#xff08;第6版&#xff09;中文版].&#xff08;美&#xff09;普拉达.扫描版.pdf 链接: https://pan.baidu.com/s/1difCyykkBdLqgLu32PgYLw 密码: tv05 C语言程序设计教程_基于Visual.Cpp.6.0环境.pdf 链接: https://pan.baidu.com/s/1q3nRrRJyUd4H3Yp_PgA…

【tensorflowflutter】自己写个机器学习模型用在项目上?

背景 拍摄APP项目上线有一阵了&#xff0c;每天的拍摄数据呈现波动上升状态、业务方需要对数据进行加工&#xff0c;如果能有对未来的数据量的预测就好了 。 目标 在端侧展示拍摄数据可视化趋势图等、并能推断数据&#xff08;选择预测日期&#xff09; 简单实现个demo gif背…

P1067 [NOIP2009 普及组] 多项式输出————C++

目录 [NOIP2009 普及组] 多项式输出题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 [NOIP2009 普及组] 多项式输出 题目描述 一元 n n n 次多项式可用如下的表达式表示&#xff1a; f ( x ) a n x n a …

Qt在linux系统上使用技巧

路径表示 Windows操作系统可用"\"或"/"表示路径&#xff0c;Unix操作系统用"/"表示路径。综合&#xff0c;qt最好用“/”表示路径。 第三方静态库和动态库 lib文件&#xff1a;&#xff08;依据编译器&#xff09; MSVC编译器是生成.lib 文件…

JAVA期末考试知识点总结

基础语法 在Java中&#xff0c;基本数据类型有以下几种&#xff1a;1.整数类型&#xff1a; 2.byte&#xff1a;占用 1 字节&#xff08;8 位&#xff09;&#xff0c;范围为 -128 到 127。 3.short&#xff1a;占用 2 字节&#xff08;16 位&#xff09;&#xff0c;范围为 -…