如果我打开https://vuejs.org/v2/guide/forms.html#Text并编辑文本 - 对在移动 chrome 中输入文本没有影响。@keyup @input @keypress - 我输入时 v-model 不会改变
<input v-model="message" @keyup="log" placeholder="Edit">
<p>Edited: {{ message }}</p>
我该如何解决?我需要在输入时获取输入值(@keyup @input)
如果我打开https://vuejs.org/v2/guide/forms.html#Text并编辑文本 - 对在移动 chrome 中输入文本没有影响。@keyup @input @keypress - 我输入时 v-model 不会改变
<input v-model="message" @keyup="log" placeholder="Edit">
<p>Edited: {{ message }}</p>
我该如何解决?我需要在输入时获取输入值(@keyup @input)
更新:经过大量讨论,我开始明白这是一个功能,而不是一个错误。v-model 比您最初想象的要复杂,移动“键盘”比键盘更复杂。这种行为可能会令人惊讶,但这并没有错。如果您想要其他内容,请单独编码您的@input。
休斯顿我们可能有问题。Vue 似乎并没有像它所说的那样做。V-model 应该在输入时更新,但如果我们分解 v-model 并显式编码 @input,它在移动设备上可以正常工作。(两个输入在 chrome 桌面上都表现正常)
要在手机上显示,可以在... https://jsbin.com/juzakis/1看到问题
请参阅此 github 问题。
function doIt(){
var vm = new Vue({
el : '#vueRoot',
data : {message : '',message1 : ''}
})
}
doIt();
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<div id='vueRoot'>
<h1>v-model</h1>
<div>
<input type='text'
v-model='message'
>
{{message}}
</div>
<h1>Decomposed</h1>
<div>
<input type='text'
:value='message1'
@input='evt=>message1=evt.target.value'
>
{{message1}}
</div>
</div>
好的,我不知道这个问题是否有其他解决方案,但可以通过一个简单的指令来解决:
Vue.directive('$model', {
bind: function (el, binding, vnode) {
el.oninput = () => (vnode.context[binding.expression] = el.value)
}
})
像使用它一样
<input v-$model="{toBind}">
我尝试了所有可以在互联网上找到的解决方案,但对我没有任何帮助。最后我想出了这个,终于可以在android上运行了!
诀窍是使用compositionupdate
事件:
<input type="text" ... v-model="myinputbox" @compositionupdate="compositionUpdate($event)">
......
......
methods: {
compositionUpdate: function(event)
{
this.myinputbox = event.data;
},
}