为了在修改输入值时使 md-input 工作,我创建了一个自定义指令,如下所示:
directives:
{
allCaps:
{
bind: function (el, binding, vnode)
{
var allCapsInput = function (e)
{
var s = e.target.value;
var uc = s.toUpperCase();
if (uc != s)
{
var start = e.target.selectionStart;
var end = e.target.selectionEnd;
e.target.value = uc;
e.target.setSelectionRange(start, end);
vnode.elm.dispatchEvent(new CustomEvent('input'));
}
};
el.addEventListener('input', allCapsInput);
}
}
}
这结合了从他建议的vue-material 问题列表中从 marcosmoura 发出指令的建议:
创建一个指令,如 v-mask,并操作元素的值。这是最好的方法,因为您可以通过您的应用程序重用它,甚至将它作为一个开源库。
使用此问题的基本代码和答案
连同来自 lifo101对此论坛帖子的回答中的光标控制
输入和模型会实时更新,并且作为奖励,文本插入符号位置不会丢失。
我稍作修改以包括 selectionEnd 和他的 selectionStart。