赞
踩
提示:这里简述出现问题相关背景:
提示:这里描述遇到的具体问题详情:
场景:开放过程中你以下这样的类似需求时,就需要十分注意(angular环境下的问题,原生不存在):
上面需求实现要点是 在输入状态下,那么很简单 input 事件即可满足,在其事件函数中 即可完成 拿到输入时的数据,并且用拿到的数据进行某些逻辑操作。(这里口述代码:在input事件回调函数中,因为背景是在Angular框架中,所以,拿去输入框实时输入的值就可以通过双向绑定的变量值去拿取。)
input事件与change事件区别
下面部分主体代码
// 模板 HTML <h1> Angular 框架中测试 input 事件 触发效果 </h1> <textarea [(ngModel)]="inputValue" (input)="inputHandle()" ></textarea> // 逻辑代码TS import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { inputValue = '' //input 事件函数 inputHandle() { console.log(this.inputValue) // 打印输入内容 } }
运行以上代码===》运行结果如下:
情形1:当输入法为英文输入状态下时,输入数字字母时,当前input事件触发机制没有任何影响。
情形2:当输入法为中文输入状态下时,输入汉中时,每次敲击键盘都会触发input事件,但是其值是空;并且当我们成功输入汉字后,汉字不会被识别到。
敲击了六下打印了六个空。
当我们按空格确认汉字后,空格也触发一个input事件,本次事件并没有把输入的最终汉字 给读取到。
情况3:接情况2,当我们在情况2基础上 在输入框中再次输入英文状态下数字字母或者按空格时,情况2 输入的汉字才会被拿取打印出来。
当再次输入空格,发现打印出了上次输入的汉字。
如果angular中文本域 input事件是这种效果 那么input事件 将不能完成 原本能完成的对应功能。
——问题所在之处。
提示:这里描述问题原因分析:
出现这个问题的具体原因没有找到但是通过测试不同环境与度娘找到了 替代input事件的方法。
下面简要说一下具体 排查问题过程:
测试代码:
// 模板 HTML - <textarea [(ngModel)]="inputValue" (compositionend)="inputHandle()"></textarea> // 逻辑 TS import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'test'; inputValue = '' inputValue2 = '' inputHandle() { console.log(this.inputValue) } }
运行结果如下:
——1
——2
——3
——4
根据四张图片不难发现,compositionend只会在输入汉字拼音输入完成后才会触发,并能拿到绑定的值。
5.查询度娘Angular 事件过程中无意间发现之前很常用的一个指令事件 ngModelChange,使用过Angluer框架的朋友可能再熟悉不过了。解决问题 具体如下:
// 模板 HTML
<textarea [(ngModel)]="inputValue" (ngModelChange)="ChangeHandle($event)"></textarea>
// TS
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
ChangeHandle(event: any) {
console.log(event)
}
}
上面代码执行后,ngModelChange 的回调函数参数就可以直接拿取 当前输入的所有新值。完全满足功能需求。
因为ngModelChange 事件 再熟悉不过了 就不再描述了,就此问题解决了,至于原生input出现的问题,我想是 框架本身的原因,再者,ngModelChange 个人认为 在Angular框架中 基本上就是替代了 原生的input和change的存在。
提示:这里描述问题原因分析:
这片文章属实是记录一次踩坑,由于惯性思维的作用,在满足业务需求的情况下,第一时间没有想到框架提供的API,采用原生API处理问题。才出现了这一系列操作,当然本次失误也并不是无用功,希望对看到的朋友或遇到一样问题的朋友都有一些帮助。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。