【问题标题】:Store bootstrap toggle in store在商店中存储引导切换
【发布时间】:2021-06-25 12:09:09
【问题描述】:

有没有办法在 vuex 商店中存储切换的 vue-bootstrap 视图?

    <div class="mb-5 mt-5">
        <button class="mr-2 button_class" v-b-toggle="'searchByName searchBySeason'">toggle</button>
    </div>
    
    <b-collapse id="searchByName" visible>
      // stuff
    </b-collapse>

    <b-collapse id="searchBySeason">
      // stuff
    </b-collapse>

我想存储切换元素的状态,以便在重新加载页面后它仍然存在。

【问题讨论】:

  • 我认为,你可以将切换元素的状态保存在浏览器的localStorage或服务器上,并通过API返回它的状态。
  • @YuriyPiskunov 但是我将如何访问元素的状态?这是我在引导程序中的主要问题。

标签: vue.js vuex bootstrap-vue


【解决方案1】:

您可以将属性绑定到&lt;b-collapse&gt;v-model,这将是truefalse,具体取决于折叠状态。

然后,您可以例如使用带有 getter/setter 的计算属性来获取和设置您的商店状态。

<template> 
  <b-collapse v-model="isNameCollapseOpen" id="searchByName">
    // stuff
  </b-collapse>
</template>

<script>
export default {
  computed: {
    isNameCollapseOpen: {
      get() {
        // Get state from store
        return this.$store.state.isNameCollapseOpen
      },
      set(isOpen) {
        // Update store using a mutation
        this.$store.commit('SET_NAME_COLLAPSE_STATE', isOpen)
      }
    }
  }
}
</script>

请注意,保存在 Vuex 中的内容在页面加载之间不会持续存在,这意味着如果您重新加载页面,默认情况下状态会丢失。 但是,有一些插件可以保持存储状态,例如 vuex-persistvuex-persistedstate

示例

const store = new Vuex.Store({
  state: {
    isNameCollapseOpen: false
  },
  mutations: {
    SET_NAME_COLLAPSE_STATE(state, isVisible) {
      state.isNameCollapseOpen = isVisible
    }
  }
})

new Vue({
  el: "#app",
  store: store,
  computed: {
    isNameCollapseOpen: {
      get() {
        // Get state from store
        return this.$store.state.isNameCollapseOpen
      },
      set(isOpen) {
        // Update store using a mutation
        this.$store.commit('SET_NAME_COLLAPSE_STATE', isOpen)
      }
    }
  }
});
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap@4.5.3/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.css" />
<script src="https://unpkg.com/vue@2.6.12/dist/vue.min.js"></script>
<script src="https://unpkg.com/vuex@3.6.2/dist/vuex.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.js"></script>

<div id="app">
  <b-btn v-b-toggle.search-by-name>Toggle collapse</b-btn>

  <b-collapse v-model="isNameCollapseOpen" id="search-by-name">
    Some text
  </b-collapse>
  <hr /> Store state: {{ $store.state.isNameCollapseOpen }}
</div>

【讨论】:

  • 我已经这样尝试过了,但是没有用。因为它必须使用“v-b-toggle”属性进行切换。因此,只是知道是否切换了某些东西对我没有帮助。但它也必须根据这个状态来切换。
  • v-b-toggle 仍然可以工作并相应地更改存储状态。
猜你喜欢
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多