javascript - Vue双表单中继器
问题描述
我对 Vue.js 的表单转发器有一些问题。所以我想做的是,我想以重复(双)的形式创建一个表单转发器。例如,我正在创建具有包信息的包,您可以根据需要创建任意数量的包。我有一些无法正常工作的代码,它每次都重复相同的形式,即使它的功能不同:
这是转发器的模板:
<b-row v-for="(pack, index) in form.packages" v-bind:key="index" :style="{animation: 'slideInDown 0.5s'}">
<!-- Repeater starts here -->
<b-form-input color="success" label-placeholder="Name" v-model="pack.name" name="package_name" type="text" />
<b-form-input color="success" label-placeholder="qty" v-model="pack.qty" name="package_qty" type="number" />
<!-- Here is second repeater (error is here)-->
<b-row v-for="(pack, index) in form.packages.info" v-bind:key="index" :style="{animation: 'slideInDown 0.5s'}">
<v-select id="country" v-model="pack.country" :options="selectCountries" :selectable="option => ! option.value.includes('select_value')" label="name" />
<b-form-input color="success" label-placeholder="package_real_price" v-model="pack.real_price" name="package_slug" type="number" />
<b-form-input color="success" label-placeholder="Sale Price" v-model="pack.sale_price" name="package_sale_price" type="number" />
<b-form-input color="success" label-placeholder="Delivery Price" v-model="pack.delivery_price" name="package_delivery_price" type="number" />
<!-- Remove Button -->
<b-button v-ripple.400="'rgba(234, 84, 85, 0.15)'" variant="outline-danger" @click="deletePackageInfo(index)">
<feather-icon icon="XIcon" class="mr-25" />
</b-button>
</b-row>
<!-- Remove Button -->
<b-button v-ripple.400="'rgba(234, 84, 85, 0.15)'" variant="outline-danger" @click="deletePackage(index)">
<feather-icon icon="XIcon" class="mr-25" />
</b-button>
<b-button v-ripple.400="'rgba(113, 102, 240, 0.15)'" variant="outline-primary" pill @click="addPackageInfo">Add Package Info</b-button>
</b-row>
<b-button v-ripple.400="'rgba(113, 102, 240, 0.15)'" variant="outline-primary" pill @click="addPackage">Add Package</b-button>
因此,在这种情况下,只有第一个中继器按预期工作,但双倍(让我们这样称呼另一个中继器)它也在重复第一个中继器(不像预期的那样)。
所以这是我的脚本:
这是形式,现在我们只对 感兴趣packages: []
,其他状态是相同的形式,但它们根据需要工作:
form: {
sku: '',
slug: '',
category: '',
type: '',
product_info: [],
packages: [],
},
所以这里是第一个中继器的功能:
addPackage: function () {
this.form.packages.push({
name: '',
qty: '',
});
},
deletePackage: function (index) {
this.form.packages.splice(index, 1);
},
这是双中继器的功能:
addPackageInfo: function () {
this.form.packages.push({
info: {
country: '',
real_price: '',
sale_price: '',
delivery_price: ''
}
});
},
deletePackageInfo: function (index) {
this.form.packages.info.splice(index, 1);
},
数据应该像这样被接收到后端:
packages: [
{
name: 'some name here',
qty: 1,
info: [
{
country: 12,
real_price: 12.22,
sale_price: 31.22,
delivery_price: 0
}
]
}
]
我不是 Vue 或 Javascript 方面的专家,但我设法做到了,我相信现在还可以,但是如何解决这个问题呢?
解决方案
推荐阅读
- sql - 如何在不出现 ORA-01460:未实现或不合理的转换错误的情况下将大字符串设置为参数?
- python - 如何将仿射变换应用于 3d numpy 数组?
- javascript - 试图将篡改脚本限制为页面部分
- c++ - 尝试将函数从类传递给可变参数模板函数
- angular - 当我单击锚按钮时,当 routerLink 不起作用时,我正在使用 Angular 7 它不起作用
- react-native - underlineColorAndroid = 'transparent' 不适用于原生输入字段?
- c++ - 我试图显示对象数组,但它给出了错误的输出
- mobx - mobx-react-lite 的“useLocalStore”钩子到底是做什么的,为什么(只是有时)需要它?
- assembly - 汇编程序 xbegin 引发非法指令
- python - GitHub Actions:Windows 上 codecov-bash 的哪个 shell?