【发布时间】:2017-12-25 19:23:55
【问题描述】:
我正在尝试使用 VueJs 构建一个问答游戏,到目前为止一切都很顺利,但是现在我开始使用 动态组件 我遇到了显示数据。
我有一个开始组件(开始视图),当用户单击开始按钮时,我希望将其替换为实际的测验组件(“进行中”)。这工作顺利。但是,在第二个组件模板中,{{ self.foo }} 引用的数据不再显示,没有任何错误消息。
我的实现方式如下:
开始组件:
startComponent = {
template: '#start-component',
data: function () {
return {
QuizStore: QuizStore.data
}
},
methods: {
startQuiz: function () {
this.QuizStore.currentComponent = 'quiz-component';
}
}
}
};
还有模板:
<script type="x-template" id="start-component">
<div>
<button v-on:click="startQuiz()">
<span>Start Quiz</span>
</button>
</div>
</script>
注意:我使用的是 x-templates,因为它在某种程度上最有意义,因为应用程序的其余部分是 Python/Flask。但所有内容都包含在 {% raw %} 中,因此括号不是问题。
测验组件:
quizComponent = {
template: '#quiz-component',
data: function () {
return {
QuizStore: QuizStore.data,
question: 'foo',
}
};
还有模板:
<script type="x-template" id="quiz-component">
<div>
<p>{{ self.question }}</p>
</div>
</script>
您可能已经看到,我正在使用存储所有状态的 QuizStore。
商店:
const QuizStore = {
data: {
currentComponent: 'start-component',
}
};
在主 .html 中,我按如下方式实现动态组件:
<div id="app">
<component :is="QuizStore.currentComponent"></component>
</div>
那么什么有效:
- 显示带有按钮的“开始”屏幕。
- 当我单击“开始”按钮时,quizComponent 会按预期显示。
什么不起作用:
- QuizComponent 模板中的
{{ self.question }}数据不显示。而且它不会抛出错误消息。 - 它也不适用于 {{ question }}。
我不明白的:
- 如果我首先使用设置
QuizStore.currentComponent = 'startComponent'渲染 quizComponent,则数据会整齐地显示出来。 - 如果我切换回
<quiz-component></quiz-component>(而不是动态组件),它也能正常工作。 - 所以
this.似乎不是指当前活动的动态组件的问题 - 所以我想这是错误的吗?但是话又说回来,我不明白为什么没有错误消息...
我无法弄清楚这里的问题 - 任何人?
【问题讨论】:
-
这似乎不是动态组件问题,因为当我用
<start-component v-if="QuizStore.currentComponent === 'start-component'"></start-component>和<quiz-component v-if="QuizStore.currentComponent === 'quiz-component'"></quiz-component>替换它时,我遇到了同样的问题..
标签: vue.js