我的项目展示了四种不同的益智游戏.通过调整值puzzle,我可以显示它们中的每一个;一次只显示一个.

<script setup>
const puzzle = ref('puzzleIndex');
</script>

<template>
  <div id="box" class="box">
    <word-wheel   v-if="puzzle==='wordWheel'"  ></word-wheel>
    <train-tracks v-if="puzzle==='trainTracks'"></train-tracks>
    <combi-word   v-if="puzzle==='combiWord'"  ></combi-word>
    <square-away  v-if="puzzle==='squareAway'" ></square-away>
  </div> 
</template>

我想用v-show代替v-if(最后给出了理由).如果我把v-if码S换成v-show码S,all the puzzles are displayed at the same time码.所以我不得不在v-show的情况下使用额外的div:

<div id="box" class="box">
  <div v-show="puzzle==='wordWheel'" >
    <word-wheel ></word-wheel>
  </div>
  <div v-show="puzzle==='trainTracks'">
    <train-tracks ></train-tracks>
  </div>
  <div v-show="puzzle==='combiWord'" >
    <combi-word ></combi-word>
  </div>
  <div v-show="puzzle==='squareAway'">
    <square-away></square-away>
  </div>
</div>

为何会是这样呢?

我想使用v-show,因为它不会重新呈现组件.因此,用户可以在已经完成一半的拼图之间切换,并在稍后再次切换以完成每个拼图.在v-if中,每一次益智try 在关闭时都会被销毁,如果你切换回它,必须重新开始.

推荐答案

正如@yoduh在 comments 中提到的,该问题是由于使用多根组件造成的:具有多个根元素的组件上的属性或指令将不会被应用,请参阅文档中的Attribute Inheritance on Multiple Root Nodes:

与具有单个根 node 的组件不同,具有多个根 node 的组件不具有自动属性回落行为.

This是问题的简单再现(请注意警告).


最简单的解决方案可能是将组件包装在单个div元素中. (显式绑定$attrs在这种情况下不会有帮助,因为v-show不包括在$attrs对象中).

Vue.js相关问答推荐

使用内部方法创建计算(computed)属性是否合法?

在 Vuejs 中更新 Chartjs 图表数据集

vue : 多个样式的类绑定在一个

Vue 脚本标签中更漂亮的 destruct 功能

VueJS CKeditor5 上传图片

带有热重载的 docker 容器上的 Vue.js 应用程序

如何从 Vuex 状态使用 Vue Router?

用 axios 搜索:新字符时取消之前的请求

使用 vue-cli 遇到无法推断解析器错误

查看 cli3 启用 CORS

在 vuejs 中将旧代码修改为 vue router 4

Vue test-utils 如何测试 router.push()

vuetify:以编程方式显示对话框

我可以在 Vue 实例方法中传播的 mapMutations 中使用this吗?

无法访问数据对象的嵌套属性

动态更改我的 Vue.js SPA 主题的最佳方式?

在 VUE JS 的光标位置插入字符

标签中的 href 赋值

如何删除 vue cli 2?

将它们分开时将 Django 的 csrf_token 放入 Vuejs