【问题标题】:Vue.js/Vuex: How do I v-bind to a state value?Vue.js/Vuex:我如何 v-bind 到一个状态值?
【发布时间】:2019-04-25 05:23:51
【问题描述】:

我正在尝试将 b-dropdown 元素中的文本绑定到商店中的值。我尝试绑定到计算属性,因为存储中的值可以更改,并且 b-dropdown 的文本应该动态更改以反映此更改。我想将值存储在存储中而不是作为数据对象,因为该值必须保留在 b-dropdown 存在的组件之外。

这是 b-dropdown 元素:

<b-dropdown v-bind:text="selectedSearchType" variant="outline-secondary">
  ...
</b-dropdown>

还有计算属性

computed: {
  selectedSearchType: function() {
    return store.getters.getSelectedSearchType
  }
},

吸气剂

getSelectedSearchType: state => {
  return state.selectedSearchType
}

国家

state: {
 selectedSearchType: "Item",
 .....
}

我收到以下错误:

[Vue warn]: Invalid prop: type check failed for prop "text". Expected String, got Function.

如果我这样做了

<b-dropdown v-bind:text="selectedSearchType()" variant="outline-secondary">

我明白了

[Vue warn]: Error in render: "TypeError: Cannot read property 'selectedSearchType' of undefined"

如何解决此问题以使 b-dropdown 的文本绑定到商店中的 selectedSearchType?

【问题讨论】:

  • 您愿意与我们分享 getSelectedSearchType getter 吗?
  • @DawidZbiński,我已经编辑了我的问题以包括吸气剂和状态
  • 如何在组件中导入store
  • 我正在使用import store from '../store/module' 导入商店。 store 包含在 module.js 文件中。

标签: javascript html vue.js vuejs2 vuex


【解决方案1】:

绑定到 store 的最佳选择是创建一个计算的 getter/setter,然后在输入中使用 v-model。这看起来像下面这样,您将不得不根据您的值进行一些调整。

这还假设b-dropdown 将在值更改时发出输入。

<b-dropdown v-model="selectedSearchType" variant="outline-secondary">

computed: {
  selectedSearchType: {
    get() { 
      return //value from store 
    },
    set(val) {
      // set the value in the store
    }
  }
}

【讨论】:

  • 我试过你推荐的,但是 b-dropdown 的文本没有显示存储在 selectedSearchType 中的字符串。下拉菜单只有一个箭头,表示没有指定文本。
  • 嗯,在它上面检查在 chrome 中的 vue 工具中传递的值是什么。可能 get 函数没有返回值。我对这种方法很有信心 b/c 我经常在像这样进出商店时使用它。
猜你喜欢
  • 2016-06-10
  • 2018-12-30
  • 2018-12-20
  • 2019-06-21
  • 1970-01-01
  • 2020-09-10
  • 2018-01-21
  • 2017-09-06
  • 2017-07-04
相关资源
最近更新 更多