Skip to content

Commit 122650a

Browse files
committed
fix: 修复 uni-forms 动态删减数据报错的bug
1 parent f24a7a3 commit 122650a

File tree

7 files changed

+44
-25
lines changed

7 files changed

+44
-25
lines changed

docs/components/forms.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ uni-app的内置组件已经有了 `<form>`组件,用于提交表单内容。
5353
```html
5454
<template>
5555
<view class="">
56-
<uni-forms :value="formData" ref="form">
56+
<uni-forms :modelValue="formData" ref="form">
5757
<uni-forms-item label="姓名" name="name">
5858
<uni-easyinput type="text" v-model="formData.name" placeholder="请输入姓名" />
5959
</uni-forms-item>
@@ -125,7 +125,7 @@ export default {
125125
```html
126126
<template>
127127
<view>
128-
<uni-forms ref="form" :value="formData" :rules="rules">
128+
<uni-forms ref="form" :modelValue="formData" :rules="rules">
129129
<uni-forms-item label="姓名" name="name">
130130
<uni-easyinput type="text" v-model="formData.name" placeholder="请输入姓名" />
131131
</uni-forms-item>
@@ -352,7 +352,7 @@ export default {
352352
```html
353353
<template>
354354
<view>
355-
<uni-forms :value="formData" ref="form">
355+
<uni-forms :modelValue="formData" ref="form">
356356
<uni-forms-item name="age" label="年龄">
357357
<uni-easyinput v-model="formData.age" type="text" placeholder="请输入年龄" />
358358
</uni-forms-item>
@@ -427,7 +427,7 @@ export default {
427427

428428
<template>
429429
<view>
430-
<uni-forms ref="form" :value="formData" validate-trigger="bind">
430+
<uni-forms ref="form" :modelValue="formData" validate-trigger="bind">
431431
<uni-forms-item name="age" label="年龄">
432432
<!-- uni-easyinput 的校验时机是数据发生变化, 即触发 input 时 -->
433433
<uni-easyinput v-model="formData.age" type="text" placeholder="请输入年龄" />
@@ -462,7 +462,8 @@ export default {
462462

463463
| 属性名 | 类型 |默认值 | 可选值 | 说明|
464464
| :-: | :-: |:-: | :-: | :-: |
465-
| v-model/value | Object | - | - | 表单数据|
465+
| v-model/value [即将废弃] | Object | - | - | 表单数据|
466+
| v-model/modelValue| Object | - | - | 表单数据|
466467
| rules | Object | - | - | 表单校验规则 |
467468
| validate-trigger| String | submit | bind/submit | 表单校验时机|
468469
| label-position | String | left | top/left | label 位置
@@ -481,11 +482,12 @@ validate | 任意表单项被校验后触发,返回表单校验信息
481482

482483
| 方法称名 | 说明 |
483484
| :-: | :-: |
484-
| submit | 对整个表单进行校验的方法,会返回一个 promise |
485+
| submit[即将废弃]| 对整个表单进行校验的方法,会返回一个 promise |
486+
| validate | 对整个表单进行校验的方法,会返回一个 promise |
485487
| setValue | 设置表单某一项 name 的对应值,通常在 uni-forms-item 和自定表单组件中使用|
486488
| validateField | 部分表单进行校验 |
487489
| clearValidate | 移除表单的校验结果 |
488-
| resetFields | 重置表单, 需要把 `uni-forms``value`属性改为 `v-model` ,且对内置组件可能不生效|
490+
| resetFields | 重置表单, 需要把 `uni-forms``modelValue`属性改为 `v-model` ,且对内置组件可能不生效|
489491

490492

491493
```javascript

pages/nvue/forms/forms.nvue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<view>
33
<text class="example-info">uni-forms 组件一般由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。</text>
44

5-
<uni-forms :rules="rules" :modelValue="formData" ref="form" validate-trigger="bind" err-show-type="undertext">
5+
<uni-forms :rules="rules" :value="formData" ref="form" validate-trigger="bind" err-show-type="undertext">
66
<uni-group title="基本信息" top="0">
77
<uni-forms-item name="name" required label="用户名">
88
<uni-easyinput type="text" :inputBorder="true" v-model="formData.name" placeholder="请输入用户名"></uni-easyinput>

pages/vue/forms/forms.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<view>
33
<text class="example-info">uni-forms 组件一般由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。</text>
44

5-
<uni-forms :rules="rules" :modelValue="formData" ref="form" validate-trigger="bind" err-show-type="undertext">
5+
<uni-forms :rules="rules" :value="formData" ref="form" validate-trigger="bind" err-show-type="undertext">
66
<uni-group title="基本信息" top="0">
77
<uni-forms-item name="name" required label="用户名">
88
<uni-easyinput type="text" :inputBorder="true" v-model="formData.name" placeholder="请输入用户名"></uni-easyinput>

uni_modules/uni-forms/changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.0.46(2021-06-04)
2+
- 修复 动态删减数据导致报错的问题
3+
## 1.0.45(2021-06-04)
4+
- 新增 modelValue 属性 ,value 即将废弃
15
## 1.0.44(2021-06-02)
26
- 新增 uni-forms-item 可以设置单独的 rules
37
- 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤

uni_modules/uni-forms/components/uni-forms/uni-forms.vue

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<template>
2-
<!-- -->
32
<view class="uni-forms" :class="{ 'uni-forms--top': !border }">
43
<form @submit.stop="submitForm" @reset="resetForm"><slot></slot></form>
54
</view>
@@ -110,6 +109,15 @@ export default {
110109
return {
111110
formData: {}
112111
};
112+
},
113+
computed:{
114+
dataValue(){
115+
if(JSON.stringify(this.modelValue ) === '{}'){
116+
return this.value
117+
}else{
118+
return this.modelValue
119+
}
120+
}
113121
},
114122
watch: {
115123
rules(newVal) {
@@ -144,12 +152,13 @@ export default {
144152
// 监听 watch
145153
registerWatch() {
146154
// 取消监听,避免多次调用 init 重复执行 $watch
147-
this.unwatchs.forEach(v => v());
155+
this.unwatchs.forEach(v => v());
148156
// watch 每个属性 ,需要知道具体那个属性发变化
149-
Object.keys(this.modelValue).forEach(key => {
157+
Object.keys(this.dataValue).forEach(key => {
150158
let watch = this.$watch(
151-
'modelValue.' + key,
152-
value => {
159+
'dataValue.' + key,
160+
value => {
161+
if(!value) return
153162
// 如果是对象 ,则平铺内容
154163
if (value.toString() === '[object Object]') {
155164
for (let i in value) {
@@ -188,6 +197,7 @@ export default {
188197
this.formData[name] = value;
189198
example.val = value;
190199
this.$emit('input', Object.assign({}, this.value, this.formData));
200+
this.$emit('update:modelValue', Object.assign({}, this.value, this.formData));
191201
return example.triggerCheck(value, callback);
192202
},
193203
@@ -212,6 +222,7 @@ export default {
212222
});
213223
214224
this.$emit('input', this.formData);
225+
this.$emit('update:modelValue', this.formData);
215226
this.$emit('reset', event);
216227
},
217228
@@ -283,7 +294,7 @@ export default {
283294
284295
if (Array.isArray(keepitem)) {
285296
keepitem.forEach(v => {
286-
newFormData[v] = this.modelValue[v];
297+
newFormData[v] = this.dataValue[v];
287298
});
288299
}
289300
@@ -313,11 +324,11 @@ export default {
313324
* 对整个表单进行校验的方法,参数为一个回调函数。
314325
*/
315326
submit(keepitem, callback, type) {
316-
for (let i in this.modelValue) {
327+
for (let i in this.dataValue) {
317328
const itemData = this.childrens.find(v => v.name === i);
318329
if (itemData) {
319330
if (this.formData[i] === undefined) {
320-
this.formData[i] = this._getValue(i, this.modelValue[i]);
331+
this.formData[i] = this._getValue(i, this.dataValue[i]);
321332
}
322333
}
323334
}

uni_modules/uni-forms/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "uni-forms",
33
"displayName": "uni-forms 表单",
4-
"version": "1.0.44",
4+
"version": "1.0.46",
55
"description": "由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据",
66
"keywords": [
77
"uni-ui",

uni_modules/uni-forms/readme.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ uni-app的内置组件已经有了 `<form>`组件,用于提交表单内容。
4848
```html
4949
<template>
5050
<view class="">
51-
<uni-forms :value="formData" ref="form">
51+
<uni-forms :modelValue="formData" ref="form">
5252
<uni-forms-item label="姓名" name="name">
5353
<uni-easyinput type="text" v-model="formData.name" placeholder="请输入姓名" />
5454
</uni-forms-item>
@@ -120,7 +120,7 @@ export default {
120120
```html
121121
<template>
122122
<view>
123-
<uni-forms ref="form" :value="formData" :rules="rules">
123+
<uni-forms ref="form" :modelValue="formData" :rules="rules">
124124
<uni-forms-item label="姓名" name="name">
125125
<uni-easyinput type="text" v-model="formData.name" placeholder="请输入姓名" />
126126
</uni-forms-item>
@@ -347,7 +347,7 @@ export default {
347347
```html
348348
<template>
349349
<view>
350-
<uni-forms :value="formData" ref="form">
350+
<uni-forms :modelValue="formData" ref="form">
351351
<uni-forms-item name="age" label="年龄">
352352
<uni-easyinput v-model="formData.age" type="text" placeholder="请输入年龄" />
353353
</uni-forms-item>
@@ -422,7 +422,7 @@ export default {
422422

423423
<template>
424424
<view>
425-
<uni-forms ref="form" :value="formData" validate-trigger="bind">
425+
<uni-forms ref="form" :modelValue="formData" validate-trigger="bind">
426426
<uni-forms-item name="age" label="年龄">
427427
<!-- uni-easyinput 的校验时机是数据发生变化, 即触发 input 时 -->
428428
<uni-easyinput v-model="formData.age" type="text" placeholder="请输入年龄" />
@@ -457,7 +457,8 @@ export default {
457457

458458
| 属性名 | 类型 |默认值 | 可选值 | 说明|
459459
| :-: | :-: |:-: | :-: | :-: |
460-
| v-model/value | Object | - | - | 表单数据|
460+
| v-model/value [即将废弃] | Object | - | - | 表单数据|
461+
| v-model/modelValue| Object | - | - | 表单数据|
461462
| rules | Object | - | - | 表单校验规则 |
462463
| validate-trigger| String | submit | bind/submit | 表单校验时机|
463464
| label-position | String | left | top/left | label 位置
@@ -476,11 +477,12 @@ validate | 任意表单项被校验后触发,返回表单校验信息
476477

477478
| 方法称名 | 说明 |
478479
| :-: | :-: |
479-
| submit | 对整个表单进行校验的方法,会返回一个 promise |
480+
| submit[即将废弃]| 对整个表单进行校验的方法,会返回一个 promise |
481+
| validate | 对整个表单进行校验的方法,会返回一个 promise |
480482
| setValue | 设置表单某一项 name 的对应值,通常在 uni-forms-item 和自定表单组件中使用|
481483
| validateField | 部分表单进行校验 |
482484
| clearValidate | 移除表单的校验结果 |
483-
| resetFields | 重置表单, 需要把 `uni-forms``value`属性改为 `v-model` ,且对内置组件可能不生效|
485+
| resetFields | 重置表单, 需要把 `uni-forms``modelValue`属性改为 `v-model` ,且对内置组件可能不生效|
484486

485487

486488
```javascript

0 commit comments

Comments
 (0)