【发布时间】:2019-12-25 23:24:53
【问题描述】:
我正在尝试使用 "v-for" 为输入组件构建一个表单,然后使用来自输入的数据使用 PDFMake 生成一个 pdf 文件。但我不知道如何将输入组件中的数据传回父组件。
我阅读了很多主题,但找不到这样做的方法。
这是没有额外输入、复选框等的简短代码。我计划使用大约 15 个不同参数的输入来生成最终 PDF。一些参数也将用于根据条件语句更改最终数据。 如果代码在一个文件中,没有循环和组件,一切都可以正常工作。但不是现在。
这里是家长:
<template lang="pug">
.form
Input(v-for="data in form.client_info" v-bind:key="data.id" v-bind:data="data")
button(@click="pdfgen") Download PDF
</template>
<script>
export default {
components: {
Input: () => import('@/components/items/form/input')
},
data() {
return {
client_name: '',
client_email: '',
form: {
client_info: [
{id:'client_name', title:'Name'},
{id:'client_email', title: 'Email'},
{id:'foo', title: 'foo'}
],
}
}
},
methods: {
pdfgen: function () {
var pdfMake = require('pdfmake/build/pdfmake.js')
if (pdfMake.vfs == undefined) {
var pdfFonts = require('pdfmake/build/vfs_fonts.js')
pdfMake.vfs = pdfFonts.pdfMake.vfs;
}
if (this.foo) {
var foo = [
'Foo: ' + this.foo
];
} else {
foo = ''
]
}
var docDefinition = {
content: [
'Name: ' + this.client_name,
'Email: ' + this.client_email,
'\n',
foo
]
}
pdfMake.createPdf(docDefinition).download('Demo.pdf');
}
}
}
</script>
这是一个子组件(输入组件):
<template lang="pug">
label.form_item
span.form_item_title {{ data.title }}
input.form_item_input(:v-model="data.id" type="text")
</template>
<script>
export default {
props: ['data']
}
</script>
任何想法如何使它工作?
【问题讨论】:
标签: javascript vue.js vuejs2 vue-component