在Aurelia中的输入html元素上创建自定义属性

在Aurelia中的输入html元素上创建自定义属性,aurelia,custom-attribute,Aurelia,Custom Attribute,我想创建一个自定义属性输入格式 我可以为属性指定两个值,使我能够清理输入字符串或修剪输入字符串 如下图所示: 清洁价值: 试图实现以下目标: <input type="text" placeholder="enter text with illegal characters" value.bind="dirtyString" input-format= "format : clean" />

我想创建一个自定义属性输入格式 我可以为属性指定两个值,使我能够清理输入字符串或修剪输入字符串

如下图所示:

清洁价值:

试图实现以下目标:

    <input
         type="text"
         placeholder="enter text with illegal characters"
         value.bind="dirtyString"
         input-format= "format : clean"
    />

上述结果应包含以下嵌入到输入元素中的内容:

     <input
            type="text"
            placeholder="enter text with illegal characters"
            value.bind="dirtyString | cleanString & updateTrigger:'blur'"
            keypress.delegate="keypress($event)"
      />

修剪也是如此


应导致:

    <input
        type="text"
        placeholder="enter your name"
        value.bind="Name | trimString & updateTrigger:'blur'"
    />

其中,cleanString、trimString是已经根据需要声明的值转换器和按键功能。我需要有关创建自定义属性的帮助,因为我不确定是否将当前值绑定到html输入元素,也不确定是否将其重新指定为具有上述所有值转换器和函数

谁能帮我实现这个目标?感谢您的投入和帮助

这就是我的立场:

import * as au from "aurelia-framework";

@au.autoinject
@au.customAttribute("input-format")
export class InputFormat {
  constructor(element: Element) {
    this.element = element;
  }

  @au.bindable
  format: string;
  formatChanged(name: string, newValue: string, oldValue: string) {
    // need to have case statements 
    switch(name){
        case 'clean':
          // to assign the relevant value converter and the 'value' is to be passed into
          // this assigment should result something like below
          // <input
          // type="text"
          // value.bind="Name | cleanString & updateTrigger:'blur'"
          // keypress.delegate="keypress($event)"
         //  >
          break;
        case 'trim':
          // to assign the relevant value converter the 'value' is to be passed into
          // <input
          // type="text"
          // value.bind="Name | trimString"          
         //  >
          break;
        default:
          // to leave the assigment as is 
          break;
      }

  }
  // the select list
  element: Element;
  val: any;
}
import*作为au从“aurelia框架”导入;
@自动注入
@au.customAttribute(“输入格式”)
导出类输入格式{
构造函数(元素:元素){
this.element=元素;
}
@可装订的
格式:字符串;
formatChanged(名称:string,新值:string,旧值:string){
//需要有案例陈述
交换机(名称){
“干净”一案:
//分配相关值转换器,并将“值”传递到
//此分配的结果如下所示
// 
打破
案例“修剪”:
//要分配相关值转换器,“值”将被传递到
// 
打破
违约:
//使分配保持原样
打破
}
}
//选择列表
元素:元素;
瓦尔:任何;
}
以下是我试图将事情组合在一起的链接:

你想做的是非常高级的东西。我敢说,自定义元素是实现这一点的更好方法。@AshleyGrant是的,你完全正确。所以我继续使用aurelia inputmask,它几乎解决了我的问题。必须为trim创建另一个值转换器,还必须使用另一个值转换器处理输入字段的初始化,因为它在第一次加载时会显示为未定义。所以现在这个解决方案可以在整个应用程序中应用,但是把所有内容都放在html输入元素上看起来很糟糕。我敢说,自定义元素是实现这一点的更好方法。@AshleyGrant是的,你完全正确。所以我继续使用aurelia inputmask,它几乎解决了我的问题。必须为trim创建另一个值转换器,还必须使用另一个值转换器处理输入字段的初始化,因为它在第一次加载时会显示为未定义。所以现在这个解决方案可以应用于整个应用程序,但是将所有内容都放在html输入元素上看起来很糟糕。
import * as au from "aurelia-framework";

@au.autoinject
@au.customAttribute("input-format")
export class InputFormat {
  constructor(element: Element) {
    this.element = element;
  }

  @au.bindable
  format: string;
  formatChanged(name: string, newValue: string, oldValue: string) {
    // need to have case statements 
    switch(name){
        case 'clean':
          // to assign the relevant value converter and the 'value' is to be passed into
          // this assigment should result something like below
          // <input
          // type="text"
          // value.bind="Name | cleanString & updateTrigger:'blur'"
          // keypress.delegate="keypress($event)"
         //  >
          break;
        case 'trim':
          // to assign the relevant value converter the 'value' is to be passed into
          // <input
          // type="text"
          // value.bind="Name | trimString"          
         //  >
          break;
        default:
          // to leave the assigment as is 
          break;
      }

  }
  // the select list
  element: Element;
  val: any;
}