v-model 使用 vue 映射状态的数组
v-model an array using vue map state
我正在努力在我的应用程序中创建自定义字段。我允许客户为各种对象(即 Initiative)定义自定义字段,并在更新或创建该对象时显示它们。
在我的状态下我定义了被修改或添加的对象:
(initiatives.js)
addEditInitiative: {
name: '',
description: '',
product_name: '',
product_id: '',
quarter: '',
year: '',
custom_fields: []
},
custom_fields
数组填充了为倡议定义的自定义字段。例如,在来自数据库的 json 响应中,自定义字段数组将包含类似这样的内容...
"payload": [
{
"id": "5dc840c3d27a6e47b9baec33",
"cid": "5d8502a2a284b46f3621f389",
"name": "2",
"description": "",
"product_name": "Maps",
"product_id": "5d86509ee24692444d84b155",
"quarter": "Q2",
"year": "2019",
"custom_fields": [
{
"id": "5db8ec9fee8040e9b6dfad87",
"cid": "5d8502a2a284b46f3621f389",
"name": "Test",
"type": "text",
"form": "initiative",
"value": ""
},
{
"id": "5dba0bcedf9cbf185683ecca",
"cid": "5d8502a2a284b46f3621f389",
"name": "test2",
"type": "text",
"form": "initiative",
"value": ""
}
]
}
]
}
我正在尝试通过 vuex 映射字段编辑每个自定义字段的值,或者如果这不起作用,则采用其他不会导致我现在遇到的错误的方法。我没有改变状态。我是直接在state上使用v-model。
(Vue 组件)
<v-item v-for="(field, index) in initiativeFields"
v-bind:index="index"
v-bind:key="field.id">
<v-text-field v-if="field.type = 'text'"
:label="field.name"
type="text"
v-model="addEditInitiative.custom_fields[index].value">
</v-text-field>
</v-item>
我不确定如何用会改变状态的东西替换 v-model="addEditInitiative.custom_fields[index].value"
。对于简单的字段,我一直在使用 https://github.com/maoberlehner/vuex-map-fields。例如,
(Vue 组件)
...mapFields('initiative', [
'addEditInitiative.name',
'addEditInitiative.description',
'addEditInitiative.product_name',
'addEditInitiative.product_id',
'addEditInitiative.quarter',
'addEditInitiative.year',
]),
v-model="test"
实际上只是 shorthand 用于 :value="test" @input="test = arguments[0]"
(或 :value="test" @input="test = $event.target.value"
用于输入等本机组件)。
您可以利用这一优势将您的代码重构为如下所示:
<v-item v-for="(field, index) in initiativeFields"
v-bind:index="index"
v-bind:key="field.id">
<v-text-field v-if="field.type = 'text'"
:label="field.name"
type="text"
:value="addEditInitiative.custom_fields[index].value"
@input="updateValue($event, index)">
</v-text-field>
</v-item>
并且在您的 updateValue
方法中,您可以使用 action/mutation.
更新商店
尝试使用多个行字段。
https://github.com/maoberlehner/vuex-map-fields#multi-row-fields
我正在努力在我的应用程序中创建自定义字段。我允许客户为各种对象(即 Initiative)定义自定义字段,并在更新或创建该对象时显示它们。
在我的状态下我定义了被修改或添加的对象:
(initiatives.js)
addEditInitiative: {
name: '',
description: '',
product_name: '',
product_id: '',
quarter: '',
year: '',
custom_fields: []
},
custom_fields
数组填充了为倡议定义的自定义字段。例如,在来自数据库的 json 响应中,自定义字段数组将包含类似这样的内容...
"payload": [
{
"id": "5dc840c3d27a6e47b9baec33",
"cid": "5d8502a2a284b46f3621f389",
"name": "2",
"description": "",
"product_name": "Maps",
"product_id": "5d86509ee24692444d84b155",
"quarter": "Q2",
"year": "2019",
"custom_fields": [
{
"id": "5db8ec9fee8040e9b6dfad87",
"cid": "5d8502a2a284b46f3621f389",
"name": "Test",
"type": "text",
"form": "initiative",
"value": ""
},
{
"id": "5dba0bcedf9cbf185683ecca",
"cid": "5d8502a2a284b46f3621f389",
"name": "test2",
"type": "text",
"form": "initiative",
"value": ""
}
]
}
]
}
我正在尝试通过 vuex 映射字段编辑每个自定义字段的值,或者如果这不起作用,则采用其他不会导致我现在遇到的错误的方法。我没有改变状态。我是直接在state上使用v-model。
(Vue 组件)
<v-item v-for="(field, index) in initiativeFields"
v-bind:index="index"
v-bind:key="field.id">
<v-text-field v-if="field.type = 'text'"
:label="field.name"
type="text"
v-model="addEditInitiative.custom_fields[index].value">
</v-text-field>
</v-item>
我不确定如何用会改变状态的东西替换 v-model="addEditInitiative.custom_fields[index].value"
。对于简单的字段,我一直在使用 https://github.com/maoberlehner/vuex-map-fields。例如,
(Vue 组件)
...mapFields('initiative', [
'addEditInitiative.name',
'addEditInitiative.description',
'addEditInitiative.product_name',
'addEditInitiative.product_id',
'addEditInitiative.quarter',
'addEditInitiative.year',
]),
v-model="test"
实际上只是 shorthand 用于 :value="test" @input="test = arguments[0]"
(或 :value="test" @input="test = $event.target.value"
用于输入等本机组件)。
您可以利用这一优势将您的代码重构为如下所示:
<v-item v-for="(field, index) in initiativeFields"
v-bind:index="index"
v-bind:key="field.id">
<v-text-field v-if="field.type = 'text'"
:label="field.name"
type="text"
:value="addEditInitiative.custom_fields[index].value"
@input="updateValue($event, index)">
</v-text-field>
</v-item>
并且在您的 updateValue
方法中,您可以使用 action/mutation.
尝试使用多个行字段。
https://github.com/maoberlehner/vuex-map-fields#multi-row-fields