【问题标题】:Bootstrap-vue Collapse: show state with arrowBootstrap-vue 折叠:用箭头显示状态
【发布时间】:2019-07-01 04:26:50
【问题描述】:

我正在使用 Bootstrap-vue,并且有一个简单的折叠组件,以便我可以切换内容的可见性。我正在寻找一种在切换按钮中包含一个指示折叠状态的箭头图标的方法:如果内容打开,箭头指向下方,如果内容关闭,箭头指向侧面。

我在Bootstrap 4 Collapse show state with Font Awesome icon 上查看了解决方案。但是,虽然这适用于 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>

【问题讨论】:

    标签: css vue.js bootstrap-4 bootstrap-vue


    【解决方案1】:

    您可以在使用this.$root.$on 事件更改状态时使用自定义行为@查看此文档:

    https://bootstrap-vue.org/docs/components/collapse#collapse

    一个简单的例子:)

    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>

    祝你好运:)

    【讨论】:

      【解决方案2】:

      这最终是我的解决方案,基于 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/vuejshttps://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);
      ...
      

      【讨论】:

        【解决方案3】:

        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 类来实现这一点。

        【讨论】:

        • 好的,这很棒。现在,如何包含“fa fa-chevron-down”和“fa fa-chevron-up”图标,以便它们真正显示出来?
        • 我是否需要安装 fontawesome 库,如fontawesome.com/how-to-use/on-the-web/using-with/vuejs 所述,还是有更简单的方法?
        • 是的,您可以通过此操作,也可以下载文件 (font-awesome-min.css) 并放入您的静态资产中,然后将它们导入项目的 main.js 文件中。
        猜你喜欢
        • 2021-09-28
        • 1970-01-01
        • 2016-12-22
        • 2013-08-21
        • 1970-01-01
        • 2013-03-26
        • 2012-08-13
        • 2018-11-05
        • 1970-01-01
        相关资源
        最近更新 更多