vue.js - Vue.js:如何在不刷新的情况下更新布局
问题描述
我想要做的是在屏幕尺寸较小时使 Dialog 全屏。我现在的代码是这样的。
<v-dialog
max-width="600px"
:fullscreen="screen_width < 450 ? true : false">
...
screen_width: screen.width
但是,除非用户刷新屏幕,否则当屏幕变小时,这种方式不会更新布局。
<v-dialog class="dialog">
@media only screen and (max-width: 450px)
.dialog {
width: 100%;
height: 100%;
}
我也尝试过这种方式,但这没有用。如何在不让用户刷新屏幕的情况下更改布局?
解决方案
而不是screen.width
我更倾向于跟踪视口宽度,window.innerWidth
.
下面的示例跟踪宽度和高度,并通过 Vue 原型上的反应对象公开它们。该对象可作为$viewport
实例上的属性访问。resize
on 事件window
用于监听视口大小的变化并相应地更新反应值。
如果您想在整个应用程序的多个位置使用视口大小,将其添加到原型中很有用。如果您只想在一个特定的地方使用它,那么您可以将大部分逻辑移到您的组件中。在这种情况下你不需要使用Vue.observable
,而是你只需要一个适合data
宽度的属性。当组件被销毁时,您还希望删除resize
侦听器。
const updateSizes = (obj = {}) => {
obj.width = window.innerWidth
obj.height = window.innerHeight
return obj
}
Object.defineProperty(Vue.prototype, '$viewport', {
value: Vue.observable(updateSizes())
})
window.addEventListener('resize', () => {
updateSizes(Vue.prototype.$viewport)
})
new Vue({
el: '#app',
vuetify: new Vuetify(),
data () {
return {
dialog: true
}
}
})
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://unpkg.com/mdi@2.2.43/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://unpkg.com/vuetify@2.0.11/dist/vuetify.min.css" rel="stylesheet">
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
<script src="https://unpkg.com/vuetify@2.0.11/dist/vuetify.min.js"></script>
<div id="app">
<v-app>
<v-dialog
v-model="dialog"
width="500"
:fullscreen="$viewport.width < 450"
>
<v-card>
<v-card-title
class="headline grey lighten-2"
primary-title
>
Title
</v-card-title>
<v-card-text>
Body text
</v-card-text>
</v-card>
</v-dialog>
</v-app>
</div>
推荐阅读
- python - APNS,当程序在 Mac 上运行时,如何修复树莓派上的“无法获取本地颁发者证书”错误?
- copy - 复制一个文件夹并为每个月创建一个新文件夹
- python - 将 int(number) 转换为列表,int 数在 python 中可能为负数
- c# - 我将我的 C# 程序添加到 Windows 注册表中如何获取我在代码中右键单击的文件?
- ravendb - RavenDB RQL 中的 LastIndexOf?
- node.js - 正方体的问题
- presto - 在超集中,如何排除我的字段包含 {} 值的结果?
- java - 如何每 5 分钟在上午 9:30 到下午 4:00 之间在 Spring Boot 中运行作业?
- ios - 一个条形按钮项的不同功能
- r - 使用 ggplot 制作热图以错误的顺序放置图块