当前位置: 首页 > 知识库问答 >
问题:

如何使tab键成为角材料中的回车键?

巫煌
2023-03-14
<input type="search" id="setId" name="setId" [attr.list]='collectionType' [(ngModel)]="selValue" class="text-box"
  placeholder="--Select--" (focus)="ValidateParent()" (keyup.tab)="test()" (keyup)="EmitValues($event)" [id]="setId"
  [matAutocomplete]="auto" [title]="selValue" [placeholder]='WaterMarkText'>


<div [hidden]="IsCascading">
  <mat-autocomplete [id]="collectionType" #auto="matAutocomplete" (optionSelected)='onChange($event)'>
    <mat-option *ngFor="let items of codeList" [value]="items.text" [attr.data-text]='items.text' [id]="items.value">
      {{items.text}}
    </mat-option>
  </mat-autocomplete>
</div>

Angular material在选项卡选择时出现问题。像materiel auto complete一样,在单击选项卡按钮时无法选择值。但是它在单击Enter按钮时工作。因此,我需要手动覆盖Tabkey事件上的Enterkey事件。怎么可能?

共有1个答案

东门晨
2023-03-14

改进我的评论,根据响应我们可以创建一个指令

import {
    Directive,
    AfterViewInit,
    OnDestroy,
    Optional
} from '@angular/core';
import {
    MatAutocompleteTrigger
} from '@angular/material';


@Directive({
    selector: '[tab-directive]'
})
export class TabDirective implements AfterViewInit, OnDestroy {
    observable: any;
    constructor(@Optional() private autoTrigger: MatAutocompleteTrigger) {}
    ngAfterViewInit() {
        this.observable = this.autoTrigger.panelClosingActions.subscribe(x => {
            if (this.autoTrigger.activeOption) {
                this.autoTrigger.writeValue(this.autoTrigger.activeOption.value)
            }
        })
    }
    ngOnDestroy() {
        this.observable.unsubscribe();
    }
}

您使用:

<input tab-directive type="text" matInput [formControl]="myControl" 
      [matAutocomplete]="auto" >

(参见stackblitz)

@Directive({
    selector: '[tab-directive]'
})
export class TabDirective {
    observable: any;
    constructor(@Optional() private autoTrigger: MatAutocompleteTrigger) {}

    @HostListener('keydown.tab', ['$event.target']) onBlur() {
        if (this.autoTrigger.activeOption) {
            this.autoTrigger.writeValue(this.autoTrigger.activeOption.value)
        }
    }

}
this.autoTrigger._onChange(this.autoTrigger.activeOption.value)
constructor(@Optional() private autoTrigger: MatAutocompleteTrigger,
    @Optional() private control: NgControl) {}
ngAfterViewInit() {
    this.observable = this.autoTrigger.panelClosingActions.subscribe(x => {
        if (this.autoTrigger.activeOption) {
            const value = this.autoTrigger.activeOption.value;
            if (this.control)
                this.control.control.setValue(value, {
                    emit: false
                });
            this.autoTrigger.writeValue(value);
        }
    })
}
 类似资料:
  • 我有一个(我使用角2材料)如下,我正在调用一个回车键上的函数。但是从用户体验的角度来看,在submit函数清除表单之前,在按下enter键后,文本框的大小仍然在变化,即文本区域中显示了新的一行。如何停止enter键更改文本区域的大小?</p

  • 用AngularJS按回车键提交表单这个问题使用html5按钮,但我使用角度材质按钮作为 但是如何使用它呢

  • 在使用Java库生成密钥时,我对密钥材料感到困惑, 根据SecretKeySpec文件, 返回此密钥的密钥材料。 关键材料到底是什么,因为如果我试着打印任何像这样的密钥, 我得到奇怪的输出, 但当我使用任何编码方案打印它时,比如Base64、Base16,我会得到实际的密钥。 谁能解释一下关键材料到底是什么?

  • 我使用MdDialogModule显示一个带有输入字段的对话框窗口。模态打开良好,我能够在输入字段中输入文本并提交,但单击提交按钮后,我希望输入表单中的数据返回到称为对话框组件的主组件,并关闭对话框。 我的对话框组件代码如下所示 主组件中调用对话框的方法如下所示。现在没有返回任何响应,它返回未定义,因为我还没有弄清楚。

  • 我试图了解如何在tkinter/python中生成TAB键事件。 我在tkinter中有一个用于返回键的键绑定。 我不想调用函数(next_focus),只想生成一个TAB事件,这样,当按下TAB键时,正在使用的条目的现有验证将能够使用“focusout”运行。(我已经设置了带有验证的文本条目,以便在validate=focusout上执行检查并处理所有事情;但是我希望它能够处理这样一种情况,即用

  • 我在Angular 5中构建了一个动态表单组件(基于https://angular.io/guide/dynamic-form的留档和示例)。 一切正常,直到我尝试使用有棱角的材料。 我在这里读过很多关于类似问题的文章,但它们似乎都是因为人们没有导入正确的模块,或者没有使用mdInput或mat Input而不是matInput。我遇到的问题并非如此。 任何想法或建议将不胜感激。 已更改代码-因错