代码之家  ›  专栏  ›  技术社区  ›  None

如何触发分号输入?

  •  -2
  • None  · 技术社区  · 5 年前

    这个 PrimeNG Chips 组件在 Enter 按键被按下。我还想在输入分号后接受标记。有没有可能触发 进来 按分号键时按?

    semicolumn(e) {
        if (e.key == ';') {
    
        }
    }
    
    <p-chips [addOnTab]="true" [addOnBlur]="true" (keydown)="semicolumn($event)"></p-chips>
    

    例如,当用户输入 test; ,就像他打字一样 test 然后 进来 .

    0 回复  |  直到 5 年前
        1
  •  2
  •   ConnorsFan    5 年前

    触发 进来 关键事件似乎很棘手。然而,既然你设定了 addOnBlur 启动芯片组件上的选项:

    <p-chips [addOnTab]="true" [addOnBlur]="true" (keydown)="onKeyDown($event)" ></p-chips>
    

    你可以打电话接受标签 blur() focus() 输入分号时,在输入元素上依次输入:

    onKeyDown(event: KeyboardEvent) {
      if (event.key === ";") {
        event.preventDefault();
        const element = event.target as HTMLElement;
        element.blur();
        element.focus();
      }
    }
    

    看见 this stackblitz 演示一下。

        2
  •  1
  •   fcdt wwesantos    4 年前

    你可以用 @ViewChild 并控制 primeng 组成部分:

    我的公司。组成部分ts

    import { Chips } from 'primeng/chips';
    import { Component, OnInit, ViewChild } from '@angular/core';
        
    export class MyComp implement OnInit {
        @ViewChild(Chips) chips: Chips;
    
        constructor(){}
    
        ngOnInit(){}
        
        onKeyDown(event) {
            if (event.key === ";") {
            // use the internal method to set the new value
                this.chips.writeValue([...this.chips.value, event.target.value]) // don't push the new value inside the array, create a new reference
                this.chips.cd.detectChanges(); // use internal change detection
                event.preventDefault();    //prevent ';' to be written
                event.target.value = "";   // reset the input value
            }
        }
    }
    

    我的公司。组成部分html

    <p-chips (keydown)="onKeyDown($event)"></p-chips>
    

    然后你可以使用 [(ngmodel)] formcontrolname (以某种形式)。

        3
  •  0
  •   Hamid    2 年前
      <p-chips separator=";"></p-chips>