vue-elementui 项目,请教 V 友们几个表单类的问题

2022-06-29 11:24:02 +08:00
 unt

请教大家几个表单的新增编辑问题: 表单结构是一个初始对象 A ,里面假设有 10 个 key ,这些数据是需要编辑和新增的。然后后端返回的数据是很多的,可能有 30 个 key ,想在编辑的时候把数据 set 进表单,比较简单的方法是 object.assign, 但是这样有个问题,就是我保存编辑的时候我不能直接去读表单数据,因为里面很多数据是不需要的,传给后端的话极大地增加了危险性,越少的数据越安全,甚至最好是仅传输改动的数据。 我目前的的做法是写了个过滤的方法,循环遍历,把后端返回的数据赋值给了初始对象 A , 但是感觉有点傻。 也有优雅的写法,比如:(({ name, sex }) => ({ name, sex }))(source),这个如何改成一个通用函数。

然后新增和编辑用同一窗口的话展示的内容也是不一样的, 如何优雅地进行控制。

综上:请问表单这块怎么做,一定要系统化,组件化,模式化(相当于是自己公司框架类的东西),单单针对一个页面去做是没有任何意义的。

1550 次点击
所在节点    程序员
9 条回复
litchinn
2022-06-29 12:23:32 +08:00
没理解到你的意思,不是双向数据绑定吗,为啥会需要手动 set ,新增编辑不同 v-if 就行了呀
toesbieya
2022-06-29 12:50:13 +08:00
第一个你写个工具类,页面里有定义的字段才从后端响应里取
第二个说实话,别这么搞,和低代码一样别人上手是要骂人的
sjhhjx0122
2022-06-29 13:04:22 +08:00
第一个写个过滤的方法,只能 set 跟表单一样的字段
新增和编辑用同一个为什么展示内容不一样,除了编辑要把数据反显进去,真不一样传个字段判断一下呗
好用的表单库 vue 上我还真没找到,可能 VeeValidate 符合你的需求?不过还是 ng 自带的表单库香啊
GKD
2022-06-29 15:12:59 +08:00
const Obj = {
key1: '1',
key2: '2',
key3: '3'
}
const UseKey = ['key1', 'key2']
const NewObj = {}
UseKey.map(item => {
NewObj[item] = Obj[item]
})
console.log(NewObj)
unt
2022-06-29 15:31:50 +08:00
@GKD #4 ....我知道,这个很简单,感觉太傻了
Envov
2022-06-29 16:28:41 +08:00
首先你需要一套可以描述表单 Ui 的数据结构,这里推荐 https://jsonforms.io/docs/renderer-sets/

其次,你服务端返回的数据中没有描述字段的类型,这里需要和服务端沟通,将数据的类型表达清楚

然后就是针对每个表单项目的值写适配器,包括新增时、编辑时,把值到 UI 的映射关系表单清楚
nzbin
2022-06-29 20:57:28 +08:00
每次看到表单问题我就忍不住想说,这用 angular 写的话简直就是分分钟啊。。。无论后端数据多复杂,直接 patchValue 给表单,然后通过表单得到的 value 只有绑定的字段,如果只想获取改动的字段检查 dirty 状态就行
luvxy
2022-06-30 09:40:21 +08:00
事件监听一下哪些字段呗修改了
wellerman
2022-06-30 15:26:06 +08:00
"因为里面很多数据是不需要的,传给后端的话极大地增加了危险性,越少的数据越安全,甚至最好是仅传输改动的数据。" 这个不应该在前端控制,数据安全和一次传多少数据到后端没关系。后端如果接收全部 Key 的更新,同时不对相应的 Key 做有效的过滤,前端哪怕不传数据,危险都是存在的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862884

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX