Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vue Multiselect和Vuex:具有来自存储区的预选值_Javascript_Vue.js_Vuex_Vue Multiselect - Fatal编程技术网

Javascript Vue Multiselect和Vuex:具有来自存储区的预选值

Javascript Vue Multiselect和Vuex:具有来自存储区的预选值,javascript,vue.js,vuex,vue-multiselect,Javascript,Vue.js,Vuex,Vue Multiselect,设想一个带有Vuex的Vuejs应用程序。我想要一个mulitselect下拉列表。Vue组件中的基本示例: <template> <div> <multiselect v-model="values" :options="options"> </multiselect> </div> </template> <script> import Multisele

设想一个带有Vuex的Vuejs应用程序。我想要一个mulitselect下拉列表。Vue组件中的基本示例:

<template>
  <div>
    <multiselect
      v-model="values"
      :options="options">
    </multiselect>
  </div>
</template>

<script>
  import Multiselect from 'vue-multiselect'
  export default {
    components: { Multiselect },
    data () {
      return {
        values: null,
        options: ['bar', 'foo', 'hello','test']
      }
    }
  }
</script>

<style src="vue-multiselect/dist/vue-multiselect.min.css"></style>
multiselect下拉列表中已选择“测试”选项。我也可以在单击时取消选择它,然后再次选择它,因为它位于选项中

如果我尝试像这样初始化我的值:

values: ["test"]
values:[this.$store.state.variableIwantPreselected]
它不能完全工作。在选择区域/下拉搜索字段中,通常显示带有所选项目名称的绿色框。对我来说,它不会在绿色框中显示字符串在这个.store.state.variableIwantPreselected中,而只是一个小的绿色框,里面没有写任何东西


我想我错过了一些关于Vuex和生命周期挂钩的东西,但我不知道是什么

如果使用Vuex是在存储使用状态下操作数据的最佳方式,

突变、操作和getter以获取任何类型的数据。有关更多信息,请查看遇到类似问题的人员的进一步注意事项:在呈现/加载组件时进行检查。在我的例子中,它是在存储区中的值更改之前加载的(当您使用vue路由器并且只有一条路由显示多个组件时,往往会发生这种情况)

解决方案:深入研究更新的生命周期挂钩

现在,我在更新的生命周期挂钩中调用一个函数。函数在方法中声明。函数检查我的值(现在初始化为空列表)的长度是否为0。如果是,则将存储值推送到列表中

在数据方面:

values: []
在方法上:

checkValues (){
    if(this.values.length === 0){
        this.values.push(this.$store.state.variableIwantPreselected)
    }
}
在updated()中:


您确定此.$store.state.variableIwantPreselected包含一个字符串数组值吗?您是否尝试使用console.log(this.$store.state.variableIwantPreselected)来测试它?我刚刚做了。值是一个字符串,它位于存储区中。但是,如果我将variableIwantPreselected设置为一个包含一个字符串的数组,它将在绿色vue multiselect框中显示为[“variableIwantPreselected”]。我需要一个对象而不是字符串吗?我不想操纵存储。我想从中获取一个值,以在其值中使用预选值初始化multiselect。该值来自存储器,但未更改。所以,我需要一个值的getter,但我不能使用值本身?是的。您的存储中需要一个getter。在某些情况下,access直接工作,在这种情况下(使用数组)似乎不工作
this.checkValues()