在Vue中,我使用v-show
制作了一份多页调查问卷,make app容器名为RiskAssessmentTest.vue
。
我有一个名为RiskAssessmentDrafts.vue
的组件用于加载调查问卷草稿,如下所示
<template>
<div>
<button type="button" class="btn btn-success btn-block rounded" @click="loadDraft(draft)">Continue</button>
</div>
</template>
<script>
import Progress from 'easy-circular-progress';
import moment from 'moment';
export default {
components: {
Progress
},
data() {
return {
moment: moment
};
},
props: ['drafts'],
methods: {
loadDraft(draft) {
this.$emit('load-draft', draft);
},
}
};
</script>
<style></style>
在父组件中调用loadDraft()
方法,如下所示
<template>
<risk-assessment-drafts :drafts="drafts" @load-draft="loadDraftAnswers" />
</template
loadDraftAnswers()
方法获取调查问卷的数据并将其加载到子组件中。
/**
* Load any draft answers into each question page.
*
* @param {*} $draft
*/
async loadDraftAnswers($draft) {
this.$refs.q1.loadDraftAnswers($draft['test_id'], 0);
this.$refs.q2.loadDraftAnswers($draft['test_id'], 1);
this.$refs.q3.loadDraftAnswers($draft['test_id'], 2);
this.$refs.q4.loadDraftAnswers($draft['test_id'], 3);
this.$refs.q5.loadDraftAnswers($draft['test_id'], 4);
},
我不知道这种做法是好是坏,但我随后调用了子组件中的loadDraftAnswers()
方法。
/**
* Method called from child that loads into respective draft answers.
*
* @param String $testid
* @param String $question
*
* @return void
*/
loadDraftAnswers($testid, $question) {
axios
.get(`/risk-assessment-test/get-draft-answers/${$testid}/${$question}`)
.then((response) => {
})
.catch((err) => {
console.log(err);
});
},
据我所知,现在这项工作,你可以看到项目设置的组件在 chrome 开发工具。
但是,当我在Chrome开发工具中再次单击组件时,一切都被取消设置。
这是预期的行为吗?我怎样才能让组件保留它的数据?
我要求在子组件中使用v-if
,但很明显,在最初工作后,所有内容再次为空。
我也做了一个小视频:https://www.awesomescreenshot.com/video/13255023?key=b841eb39bee6c33b3f79ccfc199f8d80
1条答案
按热度按时间m3eecexj1#
问题是我在同一个模板的单独区域中使用了
v-if
,出于我不太理解的原因,它破坏了第一个和最后一个页面组件。因此,本质上,数据被加载到组件中,然后组件立即被销毁,因此Vue要么没有任何东西可以将数据推送到,要么将数据添加到它认为是第一个页面的地方,即使它实际上是第二个页面。
我在记录生命周期事件
created
和destroyed
时偶然发现了这个问题这可能是一个新手的错误,但以防万一有人经历类似的事情,这是什么帮助我。
(As以及上面的评论)。