因此,我想向用户显示电子邮件发送之前的预览。为了避免样式从父页面泄漏到预览中,我决定使用iframe。我希望在用户输入表单详细信息时实时更新预览。
我将如何在iframe中渲染组件,以便在更新父窗体时自动更新其道具?这是我到目前为止的代码:
这是html:
<template>
<div id="confirmation">
<h2>Give a gift</h2>
<form @submit.prevent="checkout()">
<div class="date-section">
<label class="wide">Send</label>
<input type="radio" name="sendLater" v-model="sendLater" required :value="false">
<span>Now</span>
<input type="radio" name="sendLater" v-model="sendLater" required :value="true">
<span style="margin-right: 5px;">Later: </span>
<date-picker :disabled="!sendLater" v-model="date" lang="en" />
</div>
<div>
<label>Recipient Email</label>
<input type="email" class="custom-text" v-model="form.email" required>
</div>
<div>
<label>Recipient Name</label>
<input type="text" class="custom-text" v-model="form.name" required>
</div>
<div>
<label>Add a personal message</label>
<textarea v-model="form.message" />
</div>
<p class="error" v-if="error">Please enter a valid date.</p>
<div class="button-row">
<button class="trumpet-button" type="submit">Next</button>
<button class="trumpet-button gray ml10" type="button" @click="cancel()">Cancel</button>
</div>
</form>
<iframe id="preview-frame">
<preview-component :form="form" :sender-email="senderEmail" :term="term" />
</iframe>
</div>
</template>
这是js(注意:PreviewComponent是将在iframe中呈现的实际预览):
export default {
name: 'ConfirmationComponent',components: {
DatePicker,PreviewComponent
},props: {
term: {
required: true,type: Object
}
},data() {
return {
form: {
name: null,email: null,message: null,date: null
},date: null,sendLater: false,error: false
}
},computed: {
senderEmail() {
// utils comes from a separate file called utils.js
return utils.user.email || ''
}
},watch: {
'form.name'(val) {
this.renderIframe()
},'form.email'(val) {
this.renderIframe()
}
},methods: {
renderIframe() {
if (this.form.name != null && this.form.email != null) {
console.log('rendering iframe')
// not sure what to do here......
}
}
}
}
我已经尝试过各种方法,但是似乎最难的是正确设置预览组件的道具。大家能提供的任何帮助将不胜感激。