如何动态设置 v-select 值?

How to set v-select value dynamically?

我的 Vuetify v-select 元素看起来是这样的:

<v-select
   v-bind:items="languages"
   v-model="setLocale"
   label="Language:"
   auto prepend-icon="map"
   item-value="fetchedLocale"
   hide-details
   id="langSelect"
   >

data中您可以找到:

data () {
  return {
    languages: [
      { shortCode: 'en', text: 'English' },
      { shortCode: 'pl', text: 'Polski' },
      { shortCode: 'es', text: 'Español' },
      { shortCode: 'pt', text: 'Portugues' }
    ],
    fetchedLocale: '',
    setLocale: null
  }
}, (...)

经过一些处理后,fetchedLocale 从上面的数组中获取某些 text 属性的值,例如"Portugues".

问题:如何更新 v-select 以便它在加载 DOM 元素时设置 fetchedLocale 的值,就像之前提到的 "Portugues" 一样,而不是设置默认空值?

As per the documentationitem-value 属性定义 属性 名称用作每个项目的值。该道具的默认值为 'value',这意味着每个项目的 value 属性 将默认用作每个项目的值。例如,如果您将其设置为 text,那么您每个 languagestext 属性 将用作该项目的值。但是,这实际上不会设置 select 组件的值。

您已经通过 v-model 将 select 组件的值绑定到 setLocale。因此,如果您想将 select 组件的值更改为 fetchedLocale 值,只需将 setLocale 更新为 fetchedLocale 的值,组件将更新:

this.setLocale = this.fetchedLocale

这是一个工作示例:

new Vue({
  el: '#app',
  data() {
    return {
      languages: [
        { shortCode: 'en', text: 'English' },
        { shortCode: 'pl', text: 'Polski' },
        { shortCode: 'es', text: 'Español' },
        { shortCode: 'pt', text: 'Portugues' }
      ],
      fetchedLocale: '',
      setLocale: null
    };
  },
  created() {
    setTimeout(() => {
      this.fetchedLocale = 'English';
      this.setLocale = this.fetchedLocale;
    }, 1000);
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.min.js"></script>
<script src="https://unpkg.com/vuetify@0.15.7/dist/vuetify.js"></script>
<link href="https://unpkg.com/vuetify@0.15.7/dist/vuetify.min.css" rel="stylesheet"/>
<link href='https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons' rel="stylesheet" type="text/css">

<div id="app">
  <v-app>
    <v-select
      :items="languages"
      v-model="setLocale"    
      label="Language:"
      auto prepend-icon="map"
      item-value="text"
      hide-details
      id="langSelect"
    ></v-select>
  </v-app>
</div>