Arrays 当选项是对象数组时,如何预选vue multiselect选项?

Arrays 当选项是对象数组时,如何预选vue multiselect选项?,arrays,vue.js,vuejs2,preset,vue-multiselect,Arrays,Vue.js,Vuejs2,Preset,Vue Multiselect,我想在vue multiselect生成的select下拉列表中预选一个特定值。 如果我有一个简单的字符串数组,如以下所示,我可以让它正常工作: ['Test 1', 'Test 2', 'Test 3'] <v-multiselect :options="[{id: 1, name: 'Test 1'}, {id: 2, name: 'Test 2'}, {id: 3, name: 'Test 3'}]" label="name"

我想在vue multiselect生成的select下拉列表中预选一个特定值。 如果我有一个简单的字符串数组,如以下所示,我可以让它正常工作:

['Test 1', 'Test 2', 'Test 3']
<v-multiselect :options="[{id: 1, name: 'Test 1'}, {id: 2, name: 'Test 2'}, {id: 3, name: 'Test 3'}]"
               label="name"
               track-by="id"
               v-model="test">
</v-multiselect>
然而,当我使用一个对象数组时,我无法让它工作。例如,如果我有以下内容:

['Test 1', 'Test 2', 'Test 3']
<v-multiselect :options="[{id: 1, name: 'Test 1'}, {id: 2, name: 'Test 2'}, {id: 3, name: 'Test 3'}]"
               label="name"
               track-by="id"
               v-model="test">
</v-multiselect>
无论我如何设置v-model连接到的测试数据属性,它都不会预先选择值。当track by是id时,我尝试了1、2、3、'1、'2'和'3'进行测试;当track by是name时,我尝试了'test 1'等,但似乎没有任何效果

我做错了什么?我在上查看了文档,但它们似乎没有提供您想要为选项的对象数组预设值的示例。谷歌也没有回复我想要的东西


在一个相关的主题上,一旦我开始工作,当我将组件设置为多个时,我需要更改什么来选择多个值?谢谢。

看起来像个虫子。解决方法是使用对对象的实际引用

Vue.component'v-multiselect',window.VueMultiselect.default; 设testOptions=[{id:1,名称:'test1'},{id:2,名称:'test2'},{id:3,名称:'test3'}] 新Vue{ el:“应用程序”, 数据:函数{ 返回{ test:testOptions[1],//按使用情况跟踪 文档表明track by用于比较对象。仅当选项为对象时使用

也就是说,它指定了在比较选项中的对象值时要使用的对象键。当选项是对象时,文档实际上应该说明需要使用track by,因为使用track by和

如果没有track by,您将看到对象选项的两个错误行为:1用户将能够重新选择已选择的选项,2尝试删除已选择的选项将导致重新插入所有选项

设置初始值 不支持自动转换值数组,但可以从父组件轻松地进行转换

创建本地数据属性以分别指定track by和初始multiselect值,例如命名track by和InitialValue:

export default {
  data() {
    return {
      //...
      trackBy: 'id',
      initialValues: [2, 5],
    }
  }
}
将.track by绑定到this.trackBy,将.v-model绑定到this.value:

Vue.component'v-multiselect',window.VueMultiselect.default; 新Vue{ el:“应用程序”, 资料{ 返回{ trackBy:'id', 初始值:[5,2], 值:null, 选项:[ {id:1,名称:'Vue.js',语言:'JavaScript'}, {id:2,名称:'Rails',语言:'Ruby'}, {id:3,名称:'Sinatra',语言:'Ruby'}, {id:4,名称:'Laravel',语言:'PHP'}, {id:5,名字:'凤凰',语言:'长生不老药'} ] } }, 观察:{ 初始值:{ 立即:是的, handlervalues{ this.value=this.options.filterx=>values.includesx[this.trackBy]; } } } }
我发现的最简单的方法是从BE发送整个对象,因此它会被预选。如果从BE发送相同的对象,则会被预选。但我不知道您的选项是在FE上硬编码的还是来自数据库或其他东西。我也有同样的问题,但我的值来自我的数据库,因此很容易复制he object

谢谢你的回复,Steven。我已经尝试在返回的数据对象中设置了以下所有测试,但都不起作用:1、'1'、[1]、'1']、{id:1}、{id:1'}。还有其他想法吗?谢谢。似乎没有什么区别。我在组件中设置了:options=testOptions,然后在数据对象中设置了以下属性:[{id:1,名称:'test1'},{id:2,名称:'test2'},{id:3,名称:'test3'}]。再次尝试将test设置为所有各种可能性,但没有任何效果。还有其他想法吗?给你:。注释后的代码不起作用,但如果你用注释掉的HTML和JS将其切换,那么它会预先选择test 1值。一点线索也没有。史蒂文,你说得对,这确实起作用。但这不是一个很好的解决方法,原因有两个:1我是通常我会有一个ID,我想从中选择对象;如果你这样做,你甚至不需要track by属性,在这种情况下,这个属性是用来做什么的?它有缺陷吗?也许我误解了什么,但看起来库有缺陷。如果你设置track by=ID,那么n我认为您应该能够设置test:1,并且可以很好地运行。我想知道我是否应该提交一份关于此问题的错误报告。这肯定是一个错误。我在处理了这种东西之后开始使用vuetify…感谢您解释所有这些。我明白了,我将不得不实现类似的东西,但老实说,它感觉像一个穷人的当您指定track-id时,vue multiselect应自动为您处理此问题。