Bootstrap 5 - offcanvas 组件未在 vue 3 应用程序中显示
Bootstrap 5 - offcanvas component not displayed in vue 3 app
我正在尝试将 bootstrap 5 的新 offcanvas 组件集成到我的 vue 应用程序中。我有这段代码,在构建应用程序后,我想对其进行测试,但看不到 offcanvas 菜单。我没有加载 js 插件来维护我的应用程序,我正在添加显示 class 使用将绑定所需 class 的变量。我该如何解决?
<template>
<nav class="navbar navbar-collapse bg-light fixed-top">
<div class="container">
<span class="float-start">
<button class="navbar-toggler" type="button" @click.prevent="showOffcanvasMenu()">
<span class="navbar-toggler-icon"></span>
</button>
</span>
</div>
<div class="offcanvas offcanvas-start" :class="showMenu ? '' : 'show'" tabindex="-1">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="">Offcanvas with backdrop</h5>
<button type="button" class="btn-close text-reset" @click.prevent="showOffcanvasMenu()"></button>
</div>
<div class="offcanvas-body">
<p>.....</p>
</div>
</div>
</nav>
<!-- <div class="container-fluid bg-light p-0" v-show="isLoading">
<div class="row">
<div class="col-12 text-center">
<div class="spinner-grow text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</div> -->
<router-view/>
</template>
<script>
export default {
name: 'App',
data(){
return {
showMenu: false
}
},
methods: {
showOffcanvasMenu(){
this.showMenu ? this.showMenu = false : this.showMenu = true;
}
}
}
</script>
<style lang="scss">
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
//color: #2c3e50;
}
</style>
我看到了一些问题。
先,把:class
条件逻辑反过来,应该是:
:class="showMenu ? 'show' : ''"
其次(更大的问题),简单地切换show
class 将无法控制 Offcanvas 元素的显示. Offcanvas JS 组件不仅仅是切换 show
class。它还更改了 visibility
属性 并连接了其他几个 methods/events.
解决方法
1 - 一种选择是不使用 Vue 来切换 Offcanvas 元素,而只是使用 vanilla JS data-bs-
属性。
或者,
2 - 另一种选择是根据 showMenu
...
的值也切换元素的 visibility
属性
:style="{ visibility: showMenu ? 'visible' : 'hidden' }
或者,
3 - 为 Bootstrap 的 Offcanvas 组件创建一个 Vue 包装器组件。
我正在尝试将 bootstrap 5 的新 offcanvas 组件集成到我的 vue 应用程序中。我有这段代码,在构建应用程序后,我想对其进行测试,但看不到 offcanvas 菜单。我没有加载 js 插件来维护我的应用程序,我正在添加显示 class 使用将绑定所需 class 的变量。我该如何解决?
<template>
<nav class="navbar navbar-collapse bg-light fixed-top">
<div class="container">
<span class="float-start">
<button class="navbar-toggler" type="button" @click.prevent="showOffcanvasMenu()">
<span class="navbar-toggler-icon"></span>
</button>
</span>
</div>
<div class="offcanvas offcanvas-start" :class="showMenu ? '' : 'show'" tabindex="-1">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="">Offcanvas with backdrop</h5>
<button type="button" class="btn-close text-reset" @click.prevent="showOffcanvasMenu()"></button>
</div>
<div class="offcanvas-body">
<p>.....</p>
</div>
</div>
</nav>
<!-- <div class="container-fluid bg-light p-0" v-show="isLoading">
<div class="row">
<div class="col-12 text-center">
<div class="spinner-grow text-primary" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
</div>
</div> -->
<router-view/>
</template>
<script>
export default {
name: 'App',
data(){
return {
showMenu: false
}
},
methods: {
showOffcanvasMenu(){
this.showMenu ? this.showMenu = false : this.showMenu = true;
}
}
}
</script>
<style lang="scss">
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
//color: #2c3e50;
}
</style>
我看到了一些问题。
先,把:class
条件逻辑反过来,应该是:
:class="showMenu ? 'show' : ''"
其次(更大的问题),简单地切换show
class 将无法控制 Offcanvas 元素的显示. Offcanvas JS 组件不仅仅是切换 show
class。它还更改了 visibility
属性 并连接了其他几个 methods/events.
解决方法
1 - 一种选择是不使用 Vue 来切换 Offcanvas 元素,而只是使用 vanilla JS data-bs-
属性。
或者,
2 - 另一种选择是根据 showMenu
...
visibility
属性
:style="{ visibility: showMenu ? 'visible' : 'hidden' }
或者,
3 - 为 Bootstrap 的 Offcanvas 组件创建一个 Vue 包装器组件。