【问题标题】:Vuetify Slider set value from vuex store来自 vuex 商店的 Vuetify Slider 设置值
【发布时间】:2020-10-11 15:18:54
【问题描述】:

我正在尝试将我的 vuex 商店中的现有值设置为我的 vuetify 滑块。但它总是定位到 0。

这是我的滑块/我的代码:

   <v-slider
     v-model="sizeOfFont"
     :max="40"
     :value="pureFontSize || ''"
     @change="changeFontSize()"
     append-icon="mdi-format-size"
   ></v-slider>

export default Vue.extend({
  data: () => ({
    sizeOfFont: '',
  }),

  computed:  {
    ...mapState(['font', 'fontSize']),

    pureFontSize() {
      return this.fontSize.toString().replace('px', '');
    }
  },
  methods: {
    changeFontSize() {
      this.$store.commit('setFontSize', `${this.sizeOfFont}px`);
    },
 }

如果我 console.log this.fontSize 它实际上从我的 vuex 存储返回保存的字体大小,但我无法将它设置为我的滑块的默认值。

【问题讨论】:

  • 你能用 JSFiddle 或 CodePen 创建一个可重现的例子吗?

标签: javascript vue.js vuex vuetify.js


【解决方案1】:

问题是您同时使用v-modelvaluechange 事件来控制字体属性,并且它们正在相互交互。您应该使用v-modelvaluechange 事件的组合来控制属性,仅使用v-model 如下所示:

<v-slider
  v-model="sizeOfFont"
  :max="40"
  append-icon="mdi-format-size"
></v-slider>

export default Vue.extend({
  computed:  {
    ...mapState(['font', 'fontSize']),
    
    sizeOfFont: {
      get() {
        return this.fontSize.toString().replace('px', '');
      },
      set(val) {
        this.$store.commit('setFontSize', `${val}px`);
      }
    }
  }
}) 

然后在你的 Vuex store 中,你可以给 sizeOfFont 一个默认值,v-model 应该会取这个值。

【讨论】:

  • 我是否应该像在您的情况下使用计算的 getter 和 setter 一样始终使用它?
  • 这取决于您的用例,如果您不需要直接更改其值,则计算属性不需要设置器。您还可以使用:value@change 的组合来实现这一点。
  • 所以基本上 set 方法会起到改变的作用,对吧?如果发生更改,Bouth 运行,在这种情况下将当前值 (val) 保存到存储中。谢谢顺便说一句:)
  • 当然,很高兴它对您有用。是的,当v-slider 尝试通过v-model 更改sizeOfFont 的值时,将调用set 方法。
猜你喜欢
  • 2018-12-21
  • 2016-09-09
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2021-05-31
  • 1970-01-01
  • 2018-12-21
相关资源
最近更新 更多