Angular形式上,在onKeypress中检测键码

Angular Formly, detect keycode in onKeypress

我的 Angular-SPA 中有一个 Angular 基于表单的表单。在其中一个字段中,用户可以在物理条形码扫描仪的帮助下输入数据。扫描仪输入条形码中的数字,然后输入 'enter'(键码:13)。

当输入 'enter' 时,表单应该执行一个操作(不是表单提交操作,而是内部搜索以确保系统中不存在输入的数字),然后用户可以继续填写表格。

在 vanilla javascript 中,可以通过简单的 onKeypress 事件来做到这一点:

function checkInput(event) {
  if (event.keyCode == 13) {
    console.log("Preforming search");
  }
}
<input type="text" onKeypress="checkInput(event)">

然而,在 Formly 中,可以添加 属性 'onKeypress',但它似乎不会传递与香草 javascript 相同的事件。这是我的一些 Angular Formly 代码:

templateOptions : {
  placeholder: "ISBN",
  onKeypress: function(model, options, _this, event) {
    console.log(model);
    console.log(options);
    console.log(_this);
    console.log(event);
  }
}

当我 运行 这段代码时,事件对象是 'undefined',而不是原版 javascript.

中的同一事件

有什么方法可以访问 Angular Formly-forms 的 onKeypress-属性 中的实际事件?

干杯!

更新

找到解决办法了!我试图对自定义类型执行此操作,然后将其继承到实际的输入元素。

Formly 似乎不允许继承 onKeypress-属性。我将 onKeypress-属性 移动到实际元素,我能够解决问题。

遗憾的是,这不能被继承,而是必须为每个元素定义。

我的问题(简化):

formlyConfig.setType({
        name: 'multiInput',
        templateUrl: 'app/editor/multiInput.html',
        defaultOptions: {
            
            wrapper: ['bootstrapLabel', 'boostrapHasError'],
            templateOptions: {
                inputOptions: {
                    type: 'input',
                    wrapper: null
                },
                onKeypress: function(model, options, _this, event) {
                  // DO SEARCH (NOT WORKING)
                  
                }
            }
        }
}
                     

// --------------------------- //

                     
                     
{
  className: 'col-xs-10',
  type: "multiInput",
  key: "isbns",
    templateOptions: {
      label: 'ISBN',
      inputOptions: {
        templateOptions: {
          required: true,
          disabled: true,
          placeholder: 'ISBN'
        }
      },
      key: "isbn",
    }
  }
}

我的解决方案:

formlyConfig.setType({
        name: 'multiInput',
        templateUrl: 'app/editor/multiInput.html',
        defaultOptions: {
            
            wrapper: ['bootstrapLabel', 'boostrapHasError'],
            templateOptions: {
                inputOptions: {
                    type: 'input',
                    wrapper: null
                }
            }
        }
}
// --------------- //
{
  className: 'col-xs-10',
  type: "multiInput",
  key: "isbns",
    templateOptions: {
      label: 'ISBN',
      inputOptions: {
        templateOptions: { 
          required: true,
          disabled: true,
          placeholder: 'ISBN',
          onKeypress: function(model, options, _this, event) {
           // DO SEARCH (WORKING!)
          }
        }
      },
      key: "isbn"
    }
  }
}

这不是最好的解决方案,我希望更多的输入具有 onKeypress 事件。但看起来我可能必须单独添加它们。