input v-moel 绑定值与显示值不同 如何实现

<input  type="text" v-model.lazy=i.value />

i ={ value:'', proto:'' }
value 是展示到网页上的值
proto 是实际输入的值

比如说, 实际输入 1.2356
现在设置精确到1位
i = { value:1.2, proto:1.2356}
更改设置到2位
i = { value:1.23, proto:1.2356}

首先输入完成后要把value 记录到 proto

按理说 这个 v-model 要绑到 proto上
然后 显示 的又是处理后的 value 值

请教如何实现

v-model.lazy实际为onchange事件和v-bind结合。如果要实现格式化,失去焦点显示格式化值,获取焦点显示原始值,可以用v-bind绑定显示值,onblur事件获取输入值设置proto后,同时格式化输入值赋值给value。onfocus事件显示原始值

简单示例如下


<script src="https://unpkg.com/vue@next" data-ver="3"></script>
<div id="app">
    输入值:<input type="text" :value="i.value" @blur="setText" @focus="setText(i.proto)" /><br />
    小数位:<input type="text" v-model="decimalNum" />
</div>
<script>
    var app = {
        data() {
            return {
                i: { value: '', proto: '' },
                decimalNum:2//显示的小数位
            }
        },
        methods: {
            setText(e) {
                if (e.target) {//change事件
                    if (e.target.value && !isNaN(e.target.value)) {
                        this.i.proto = parseFloat(e.target.value) || 0;

                        var v = Math.pow(10, this.decimalNum)
                        this.i.value = Math.floor(this.i.proto * v) / v;
                    }
                } else this.i.value = this.i.proto.toString();//focus事件
            }
        }
    };
    Vue.createApp(app).mount('#app')
</script>

formatter

计算属性试试?

可以找个变量 备份 一下 没处理过的值

1.你这设计有问题
展示到网页上的值和实际输入的值就不该用输入框展示
2.输入框:输入什么就必须展示什么,这是规范

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632