Angular2和jQuery'更改'事件
Angular2 and jQuery 'change' events
我有一个隐藏的输入来控制jQuery所做的更改,其中包括angular2 change
事件,就像这个
<input id='input1' hidden (change)='onChange($event)'>
然后在我的情况下,我必须使用jQuery更改此输入的值,然后触发change
事件:
$('#input1').val('somevalue').trigger('change');
我通过jQuery触发的这个change
事件只适用于jQuery,而不适用于Angular2:
//This is working
$('#input').change(function(){
console.log('Change made');
})
在angular2组件中:
//This is not working
onChange(): void{
console.log('Change made');
}
在这种情况下我该如何解决?
您可以将模板引用变量分配给<input>
,如#hiddenInput1
,在组件类中获取其本机元素(通过@ViewChild
),然后使用jQuery本身来侦听change
事件。
在此处演示plunker。
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<h1>My First Angular 2 App</h1>
<hr>
<input id='input1' hidden #hiddenInput1>
`
})
export class AppComponent implements AfterViewInit {
@ViewChild('hiddenInput1') hiddenInput1:ElementRef;
ngAfterViewInit() {
$(this.hiddenInput1.nativeElement).on('change', (e) => {
console.log('Change made -- ngAfterViewInit');
this.onChange(e);
});
}
onChange(): void{
console.log('Change made -- onChange');
}
}
Angular2更改事件通过本机addEventListener
添加。
您不能用jQuery的.trigger('change')触发本机事件。因此,您需要创建一个本机事件并调度它:
const customEvent = document.createEvent('Event');
customEvent.initEvent('change', true, true);
$('#input1')[0].dispatchEvent(customEvent);
这样angular2将触发onChange
处理程序。
这是一个演示plunker
正如@Cristal Embalages在评论中提到的,你需要对angular2使用input
事件,因为DefaultValueAccessor
正在订阅此事件:
@Directive({
selector:
'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',
host: {'(input)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},
providers: [DEFAULT_VALUE_ACCESSOR]
})
export class DefaultValueAccessor implements ControlValueAccessor {
一些示例
相关文章:
- Jquery滑块在事件更改时更新值
- Backbone.js ModelBinder将默认事件更改为keyup
- 如何通过一个onclick事件更改两个单独的图像
- 如何使用 OnClick 事件更改结构 JS 的覆盖图像
- 使用事件更改数组的一个元素
- 将函数从点击事件更改为窗口加载
- 将googlemapv3点击事件更改为jquery
- jquery提交表单,带有事件更改按钮
- 如何在单击区域 HREF 标签时创建活动事件(更改 BG 或创建边框)
- 如何在下拉事件更改时使用 jquery 清除或清空列表框
- 如何使用 JavaScript 滚动事件更改 HTML 输入
- 将鼠标悬停事件更改为工具提示的 Onclick 事件
- 表单事件更改不适用于下拉列表选择
- 如何避免在为 dijit/form/TextBox 正确设置值时触发事件“更改”
- 我可以通过beforeSent事件更改jQuery.ajax的函数调用参数(在数据中发送)吗?
- 从 iframe 页面事件更改父级的 css
- 使用 .change Jquery 事件更改内容
- HTML/DOM:鼠标事件更改按钮
- Javascript.使用鼠标悬停事件更改数组中 td 元素的背景颜色
- 谷歌扩展:标签事件 - 更改窗口