element-plus [Bug Report] [Component] [input] el-input 的formatter功能太弱了,期望增强

hkmswyz6  于 2022-11-05  发布在  其他
关注(0)|答案(5)|浏览(962)

Bug Type:Component

Environment

  • Vue Version: 3.2.33
  • Element Plus Version: 2.1.11
  • Browser / OS: UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 Edg/100.0.1185.50
  • Build Tool: CDN

Reproduction

  • el-input

Element Plus Playground

Steps to reproduce

打开复现链接玩玩就知道了。应该做到要保持未格式化前的值,比如输入123456,在formatter里进行格式化成123,456, v-model 的值应该是123456,而不是把v-model也变了。可能你会说不是提供了parse函数吗,parse 函数的入参也是格式化的值,并没有保持未格式化前的值。
很多时候,格式化只是用于显示的,实际提交数据到后台的时候是需要未格式化前的值的。

What is Expected?

v-model 的值能保持未格式化前的值,parse函数的入参也应该是未格式化前的值

What is actually happening?

v-model 和 parse 函数的值都是格式化后的值

Additional comments

mwyxok5s

mwyxok5s1#

parser 函数可以提供2个参数,一个是未格式化的,一个是格式化的

提供了formatter,parser是一大进步,相当于把最大自由度都交给了具体的使用者,但是在组件内部维护一个变量来持有未格式化的值,是一件很容易的事,但是对于使用者来说却是省了很多事

比如对于数字千分位格式化来说,可以在formatter函数里调用 Number 的 toLocaleString() 进行正确的格式化,在parser里可以简单的返回未格式化的值

l7wslrjt

l7wslrjt2#

parser 函数可以提供2个参数,一个是未格式化的,一个是格式化的

提供了formatter,parser是一大进步,相当于把最大自由度都交给了具体的使用者,但是在组件内部维护一个变量来持有未格式化的值,是一件很容易的事,但是对于使用者来说却是省了很多事

比如对于数字千分位格式化来说,可以在formatter函数里调用 Number 的 toLocaleString() 进行正确的格式化,在parser里可以简单的返回未格式化的值

我期望的是在el-input-number组件增加formatter功能

hec6srdp

hec6srdp3#

parser 函数可以提供2个参数,一个是未格式化的,一个是格式化的
提供了formatter,parser是一大进步,相当于把最大自由度都交给了具体的使用者,但是在组件内部维护一个变量来持有未格式化的值,是一件很容易的事,但是对于使用者来说却是省了很多事
比如对于数字千分位格式化来说,可以在formatter函数里调用 Number 的 toLocaleString() 进行正确的格式化,在parser里可以简单的返回未格式化的值

我期望的是在el-input-number组件增加formatter功能

这个应该也容易的吧,毕竟在el-input 里面已经实现了,不过我觉得你应该单独开一个issue更好点

umuewwlo

umuewwlo5#

或许可以参考借鉴下 inputmask 的方案,扩展性会更强
https://robinherbots.github.io/Inputmask/

相关问题