【发布时间】:2021-06-11 09:21:47
【问题描述】:
我正在使用 Quasar,我希望在用户缩小浏览器时自动将 drawer 更改为 mini 模式。现在,即使我缩小浏览器,它也总是打开。
这是我在下面尝试的:
<q-drawer
v-model="drawer"
show-if-above
:mini="!drawer || miniState"
@click.capture="drawerClick"
:width="220"
:breakpoint="500"
bordered
:content-style="{ backgroundColor: '#f5f7f9' }"
>
<q-scroll-area class="fit">
<q-list padding>
<q-btn
v-if="!miniState"
flat
left
@click="miniState = !miniState"
class="logo-btn"
>
<img
src="~assets/os_logo.png"
width="144px"
height="24px"
contain
/>
</q-btn>
<q-btn v-else flat left @click="miniState = !miniState">
<img src="~assets/os_logo_no_text.png" width="24px" contain />
</q-btn>
<!-- MENU -->
<q-expansion-item
default-opened
v-for="(menu, index) in menus"
:style="index === 0 && 'margin-top: 27px'"
:icon="menu.icon"
:label="menu.title"
:key="menu.id"
:expand-icon="menu.subMenus.length === 0 ? 'none' : ''"
header-class="header-bg text-black"
expand-icon-class="text-gray"
>
<q-expansion-item
v-for="(sub, index) in menu.subMenus"
:key="index"
:label="sub.title"
expand-icon="none"
class="sub-content"
:to="{ name: sub.link }"
/>
</q-expansion-item>
</q-list>
</q-scroll-area>
</q-drawer>
以及下面的脚本代码:
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
// name: 'ComponentName'
data() {
return {
drawer: false,
miniState: false,
},
computed: { // <-- I tried this one..
miniState() {
if (window.innerWidth < 600) {
return (this.miniState = true);
}
}
},
});
</script>
我也在这里检查了这个答案:How to default navigation drawer to closed on mobile and open on desktop?
但这并不是我真正的目标,因为drawer 的模式被卡住并且没有响应地改变。有什么建议吗?
【问题讨论】:
-
在您的代码中,您没有任何逻辑可以观察浏览器调整大小。
-
@Chin.Udara 嗯,你是说
watch()? -
不是专门的
watch,但您也可以使用computed属性实现相同的目的。我的意思是,您上面的代码中不存在该逻辑。 -
@Chin.Udara 实际上我也尝试过,但没有成功。它没有实时检测屏幕大小,而是保留了一次..
-
你能用你尝试过的任何东西更新你的代码吗?
标签: vue.js responsive quasar-framework drawer