Bootstrap-vue Collapse: 用箭头显示状态
Bootstrap-vue Collapse: show state with arrow
我正在使用 Bootstrap-vue,并且有一个简单的折叠组件,这样我就可以切换内容的可见性。我正在寻找一种在切换按钮中包含箭头图标以指示折叠状态的方法:如果内容打开则箭头指向下方,如果内容关闭则箭头指向侧面。
我已经在此处查看了解决方案 。但是,虽然这适用于 Bootstrap 4,但我无法使其与 Bootstrap-vue 一起使用,因为标记元素不同。那么,根据下面的标记,我怎样才能实现折叠状态箭头?
<div>
<b-btn v-b-toggle.collapse3 class="m-1">Toggle Collapse</b-btn>
<b-collapse visible id="collapse3">
<b-card> some content </b-card>
</b-collapse>
</div>
示例 HTML 标记:
<b-btn v-b-toggle.myCollapse>
<span class="when-opened">
<i class="fa fa-chevron-down" aria-hidden="true"></i></span>
<span class="when-closed">
<i class="fa fa-chevron-up" aria-hidden="true"></i></span>
My Collapse
</b-btn>
<b-collapse id="myCollapse">
<!-- content here -->
</b-collapse>
自定义示例 CSS:
.collapsed > .when-opened,
:not(.collapsed) > .when-closed {
display: none;
}
您可以借助以上 css 类.
这是我最终的解决方案,基于 Riddhi 的回答:
<b-btn block href="#" v-b-toggle.accordion1 variant="secondary">
Time Period
<span class="when-opened">
<font-awesome-icon icon="chevron-down" />
</span>
<span class="when-closed">
<font-awesome-icon icon="chevron-right" />
</span>
</b-btn>
<b-collapse id="accordion1" role="tabpanel">
<!-- some content -->
</b-collapse>
还有额外的CSS:
<style scoped>
...
.collapsed > .when-opened,
:not(.collapsed) > .when-closed {
display: none;
}
...
</style>
我安装并导入了 Font Awesome 软件包,如此处所述https://fontawesome.com/how-to-use/on-the-web/using-with/vuejs and https://origin.fontawesome.com/how-to-use/with-the-api/setup/importing-icons。我的 main.js 文件中的导入代码如下所示:
import Vue from 'vue'
...
import { library } from '@fortawesome/fontawesome-svg-core'
import { faChevronRight, faChevronDown } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
library.add(faChevronRight, faChevronDown);
Vue.component('font-awesome-icon', FontAwesomeIcon);
...
您可以在使用事件更改状态时使用自定义行为 this.$root.$on
查看此文档:
a simple example :)
Vue.use(BootstrapVue);
new Vue({
el: '#app',
data() {
// collapsed has the status
return { collapsed: false };
},
mounted() {
// Emitted when collapse has
// changed its state
this.$root.$on(
'bv::collapse::state',
// id of the collapse component
// collapse is the state
// true => open, false => close
(id, collapsed) => {
if (id === "my-collapse") {
this.collapsed = collapsed;
}
});// $on
},
// plus
computed: {
btnVariant: function () {
return this.collapsed?
'danger' : 'info'
},
btnTxt: function () {
return this.collapsed?
' Show ' : ' Hide';
}
}
});
<!-- Required Stylesheets -->
<link
type="text/css"
rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css"
/>
<link
type="text/css"
rel="stylesheet"
href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css"
/>
<!-- Required scripts -->
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
<!-- markup template -->
<div id="app">
<b-button
v-b-toggle:my-collapse
:variant="btnVariant">
{{ btnTxt }} - Collapse
</b-button>
<b-collapse id="my-collapse">
Lorem ipsum dolor sit amet...
</b-collapse>
</div>
祝你好运:)
我正在使用 Bootstrap-vue,并且有一个简单的折叠组件,这样我就可以切换内容的可见性。我正在寻找一种在切换按钮中包含箭头图标以指示折叠状态的方法:如果内容打开则箭头指向下方,如果内容关闭则箭头指向侧面。
我已经在此处查看了解决方案
<div>
<b-btn v-b-toggle.collapse3 class="m-1">Toggle Collapse</b-btn>
<b-collapse visible id="collapse3">
<b-card> some content </b-card>
</b-collapse>
</div>
示例 HTML 标记:
<b-btn v-b-toggle.myCollapse>
<span class="when-opened">
<i class="fa fa-chevron-down" aria-hidden="true"></i></span>
<span class="when-closed">
<i class="fa fa-chevron-up" aria-hidden="true"></i></span>
My Collapse
</b-btn>
<b-collapse id="myCollapse">
<!-- content here -->
</b-collapse>
自定义示例 CSS:
.collapsed > .when-opened,
:not(.collapsed) > .when-closed {
display: none;
}
您可以借助以上 css 类.
这是我最终的解决方案,基于 Riddhi 的回答:
<b-btn block href="#" v-b-toggle.accordion1 variant="secondary">
Time Period
<span class="when-opened">
<font-awesome-icon icon="chevron-down" />
</span>
<span class="when-closed">
<font-awesome-icon icon="chevron-right" />
</span>
</b-btn>
<b-collapse id="accordion1" role="tabpanel">
<!-- some content -->
</b-collapse>
还有额外的CSS:
<style scoped>
...
.collapsed > .when-opened,
:not(.collapsed) > .when-closed {
display: none;
}
...
</style>
我安装并导入了 Font Awesome 软件包,如此处所述https://fontawesome.com/how-to-use/on-the-web/using-with/vuejs and https://origin.fontawesome.com/how-to-use/with-the-api/setup/importing-icons。我的 main.js 文件中的导入代码如下所示:
import Vue from 'vue'
...
import { library } from '@fortawesome/fontawesome-svg-core'
import { faChevronRight, faChevronDown } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
library.add(faChevronRight, faChevronDown);
Vue.component('font-awesome-icon', FontAwesomeIcon);
...
您可以在使用事件更改状态时使用自定义行为 this.$root.$on
查看此文档:
a simple example :)
Vue.use(BootstrapVue);
new Vue({
el: '#app',
data() {
// collapsed has the status
return { collapsed: false };
},
mounted() {
// Emitted when collapse has
// changed its state
this.$root.$on(
'bv::collapse::state',
// id of the collapse component
// collapse is the state
// true => open, false => close
(id, collapsed) => {
if (id === "my-collapse") {
this.collapsed = collapsed;
}
});// $on
},
// plus
computed: {
btnVariant: function () {
return this.collapsed?
'danger' : 'info'
},
btnTxt: function () {
return this.collapsed?
' Show ' : ' Hide';
}
}
});
<!-- Required Stylesheets -->
<link
type="text/css"
rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css"
/>
<link
type="text/css"
rel="stylesheet"
href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css"
/>
<!-- Required scripts -->
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
<!-- markup template -->
<div id="app">
<b-button
v-b-toggle:my-collapse
:variant="btnVariant">
{{ btnTxt }} - Collapse
</b-button>
<b-collapse id="my-collapse">
Lorem ipsum dolor sit amet...
</b-collapse>
</div>
祝你好运:)