我正在构建nuxt.js SSR网络应用程序,我面临着一个奇怪的问题。
<div class="container" @mouseenter="hovered = true" @mouseleave="hovered = false">
<transition name="fade">
<div class="class1" v-show="!hovered && isDesktop">blank_1</div>
</transition>
<transition name='scale'>
<div class="class2" v-show="hovered || !isDesktop">blank_2</div>
</transition>
</div>
<script>
export default {
data() {
return {
hovered: false
}
},
computed: {
isDesktop() {
if(process.client) {
window.screen.width > 1024 ? return true : return false
}
}
}
}
</script>
<style>
.class1 {
height: 100px;
width: 100px;
background-color: red;
}
.class2 {
height: 100px;
width: 100px;
background-color: blue;
}
</style>
我将通过几个步骤来解释这一点。
v-show="!hovered"
并在移动屏幕display:none;
上设置媒体查询。所以我修复了我唯一的桌面问题。但是当我v-show="!hovered && isDesktop"
时,为什么它会这样运作?
我猜测Nuxt.JS上的第一个加载在服务器上,因此 isDesktop 以 undefined 的形式返回,因此v-show="!hovered && isDesktop"
变为v-show="!false && undefined"
。但是为什么第二个div的v-show指令:v-show="hovered || !isDesktop"
如果它变成v-show="false || !undefined"
则可以正常工作但是我仍然将这个div 隐藏在桌面上和在手机上显示。
P.S。这是我的第一个StackOverflow问题,抱歉,如果我的代码很糟糕,我不知道它是如何工作的。谢谢你的回答。
答案 0 :(得分:0)
奇怪的行为可能来自这一行
window.screen.width > 1024 ? return true : return false
什么时候应该
return window.screen.width > 1024 ? true : false
语法不正确。当我尝试时,Nuxt甚至不会编译它。我想知道为什么你的Nuxt服务器可以使用它。