如何在使用值转换器或任何其他方法使用 aurelia 时绑定和显示值绑定
How to bind and show the value bound while using aurelia either using value converters or any other method
我正在尝试使用 aurelia 值转换器来解析用户输入的值,方法是删除输入字段中输入的所有非法字符并显示已解析的文本。但是在极少数情况下,我无法向用户显示已解析的文本,而是显示带有非法字符的输入文本。事实上,输入的文本实际上已被解析,所以我想知道可以更改什么以显示已解析的文本。
我试过包括两个替换正则表达式语句,但似乎没有什么可以更正这个问题。
值转换器清理-string.ts:
export class CleanStringValueConverter {
fromView(val) {
val = val
.replace(/([|!/&*:;$%@#`'_"^<>()+-.,\])+/g, "")
.replace(/([^a-z 0-9]+)/gi, "")
.trim();
console.log(val);
return val;
}
}
app.html:
<template>
<require from="./clean-string"></require>
<h3>Enter text with illegal charaters</h3>
<input type="text" value.bind="dirtyString | cleanString" />
</template>
app.ts:
export class DCString{
dirtyString: string;
}
例如:
我输入 'random####'
我希望 'random' 在我键入最后一个字符时显示在输入字段中,因为我正在解析非法字符。
但我只在文本字段中看到 'random####',除非我键入一个额外的字符然后触发解析。
那么有办法解决这个问题吗?
我需要进行哪些更改才能使其生效?
预先感谢您的意见!!
这里是正在发生的事情的片段:
从控制台我们可以看到输入的文本实际上已按我的需要进行了解析,但在输入字段中并未显示为已解析的文本,即使这是绑定到输入的值。
下面是上述代码的 codesandbox 的 link:
sandbox link
更新:
我使用按键事件尝试了评论中的一项建议。在您粘贴包含所有非法字符的字符串之前,它就像一个魅力。有没有办法解决这个问题?
我觉得这就是我一直在寻找的东西,我觉得我找到了解决方案。我不得不使用值转换器、按键事件和 updateTrigger 绑定规则的概念来轻松完成这项工作。如果您找到更好的解决方案,请告诉我:)
非常感谢您到目前为止的所有意见:)
这是我所做的:
app.html
<template>
<require from="./clean-string"></require>
<h3>Enter text with illegal charaters</h3>
<input
type="text"
value.bind="dirtyString | cleanString & updateTrigger:'blur'"
keypress.delegate="keypress($event)"
/>
<p>${dirtyString}</p>
</template>
clean-string.ts
export class CleanStringValueConverter {
fromView(val) {
val = val
.replace(/([|!/&*:;$%@#`'_"^<>()+-.,\])+/g, "")
.replace(/([^a-z 0-9]+)/gi, "")
.trim();
return val;
}
toView(dirtyString) {
dirtyString = dirtyString
.replace(/([|!/&*:;$%@#`'_"^<>()+-.,\])+/g, "")
.replace(/([^a-z 0-9]+)/gi, "")
.trim();
return dirtyString;
}
}
app.ts
export class Color {
dirtyString = "";
keypress(event) {
return /([a-z 0-9]+)/gi.test(event.key);
// return !/[|!/&*:;$%@#`'_"^<>()+-.,\]/.test(event.key);
}
}
也可以在 aurelia 网站上找到讨论:
discussion link
我正在尝试使用 aurelia 值转换器来解析用户输入的值,方法是删除输入字段中输入的所有非法字符并显示已解析的文本。但是在极少数情况下,我无法向用户显示已解析的文本,而是显示带有非法字符的输入文本。事实上,输入的文本实际上已被解析,所以我想知道可以更改什么以显示已解析的文本。
我试过包括两个替换正则表达式语句,但似乎没有什么可以更正这个问题。
值转换器清理-string.ts:
export class CleanStringValueConverter {
fromView(val) {
val = val
.replace(/([|!/&*:;$%@#`'_"^<>()+-.,\])+/g, "")
.replace(/([^a-z 0-9]+)/gi, "")
.trim();
console.log(val);
return val;
}
}
app.html:
<template>
<require from="./clean-string"></require>
<h3>Enter text with illegal charaters</h3>
<input type="text" value.bind="dirtyString | cleanString" />
</template>
app.ts:
export class DCString{
dirtyString: string;
}
例如: 我输入 'random####' 我希望 'random' 在我键入最后一个字符时显示在输入字段中,因为我正在解析非法字符。
但我只在文本字段中看到 'random####',除非我键入一个额外的字符然后触发解析。
那么有办法解决这个问题吗? 我需要进行哪些更改才能使其生效? 预先感谢您的意见!!
这里是正在发生的事情的片段:
从控制台我们可以看到输入的文本实际上已按我的需要进行了解析,但在输入字段中并未显示为已解析的文本,即使这是绑定到输入的值。
下面是上述代码的 codesandbox 的 link: sandbox link
更新:
我使用按键事件尝试了评论中的一项建议。在您粘贴包含所有非法字符的字符串之前,它就像一个魅力。有没有办法解决这个问题?
我觉得这就是我一直在寻找的东西,我觉得我找到了解决方案。我不得不使用值转换器、按键事件和 updateTrigger 绑定规则的概念来轻松完成这项工作。如果您找到更好的解决方案,请告诉我:)
非常感谢您到目前为止的所有意见:)
这是我所做的:
app.html
<template>
<require from="./clean-string"></require>
<h3>Enter text with illegal charaters</h3>
<input
type="text"
value.bind="dirtyString | cleanString & updateTrigger:'blur'"
keypress.delegate="keypress($event)"
/>
<p>${dirtyString}</p>
</template>
clean-string.ts
export class CleanStringValueConverter {
fromView(val) {
val = val
.replace(/([|!/&*:;$%@#`'_"^<>()+-.,\])+/g, "")
.replace(/([^a-z 0-9]+)/gi, "")
.trim();
return val;
}
toView(dirtyString) {
dirtyString = dirtyString
.replace(/([|!/&*:;$%@#`'_"^<>()+-.,\])+/g, "")
.replace(/([^a-z 0-9]+)/gi, "")
.trim();
return dirtyString;
}
}
app.ts
export class Color {
dirtyString = "";
keypress(event) {
return /([a-z 0-9]+)/gi.test(event.key);
// return !/[|!/&*:;$%@#`'_"^<>()+-.,\]/.test(event.key);
}
}
也可以在 aurelia 网站上找到讨论: discussion link