在我的应用程序中,我有一个全局搜索字段,用于过滤列表中的数据,列表将有多列。从其他组件设置过滤器值(设置到输入值)它发生但我必须在输入上触发手动键盘事件(输入键)操作。
我尝试使用viewChild装饰器。
component.html
<input #gb type="text" placeholder="Global search.." class="changeListComponent_inputSearch" [(ngModel)]="jiraRef" />
component.ts
@ViewChild('gb') gb:ElementRef;
this.jiraRef = jiraRef;
const event = new KeyboardEvent("keypress",{ "which ": "13"});
this.gb.nativeElement.focus();
this.gb.nativeElement.dispatchEvent(event);
使用这个我可以设置值并进行焦点但键盘事件不会触发。
答案 0 :(得分:0)
使用原生js代码触发了键启动事件 将id属性与元素引用一起放在input元素中。
从我的组件内部创建新函数。
triggerEvent(el, type) {
if ('createEvent' in document) {
var e = document.createEvent('HTMLEvents');
e.initEvent(type, false, true);
el.dispatchEvent(e);
} else {
var e = document.createEventObject();
e.eventType = type;
el.fireEvent('on'+e.eventType, e);
}
}
var el=document.getElementById('gb-search');
this.triggerEvent(el,'keyup');
答案 1 :(得分:0)
我不知道你为什么要把它弄复杂。为什么不直接在 input 字段中添加一个按键事件,然后也可以通过 viewChild 触发该事件?
<input id="text1" type=text (keyup)="enterPressed()">
然后也可以通过子视图访问相同的方法:
this.viewChild.enterPressed();
答案 2 :(得分:0)
一般来说,您的输入可以是:
<input (keydown.enter)="doEnter()">
从其他组件只需调用函数 doEnter
。怎么样?
如果搜索组件在父组件中,这很容易,因为您可以使用 ViewChild
<search-component></search-component>
@ViewChild(SearchComponent) searchComponent
..whe we need..
this.searchComponent.doEnter()
否则,通常使用主题来订阅。您有一项服务,
@Injectable({
providedIn: 'root',
})
export class KeyBoardService {
keyboard:Subject<any>=new Subject<any>()
constructor() { }
}
在您的组件搜索中,在构造函数和 ngOnInit 中注入服务
constructor(private keyboardService:KeyBoardService){}
ngOnInit(){
this.keyboardService.keyboard.subscribe(_=>{
this.doEnter()
})
}
在另一个组件中
constructor(private keyboardService:KeyBoardService){}
..in anywhere..
this.keyboardService.next(null);
存在另一个选项,即当两个组件同时出现在屏幕上时 - 并且在使用模板引用变量和输入的同一个 <router-outlet></router-outlet>
中。所以我们有
<search-component #search></search-component>
<other-component [search]=search><other-component>
在其他组件中
@Input('search') searchComponent
..in anywhere
this.searchComponent.doEnter
答案 3 :(得分:-2)
您只需使用
即可<input type=text (keypress)="eventHandler($event)">
eventHandler(event) {
console.log(event, event.keyCode, event.keyIdentifier);
}