如何动态设置 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 documentation,item-value
属性定义 属性 名称用作每个项目的值。该道具的默认值为 'value'
,这意味着每个项目的 value
属性 将默认用作每个项目的值。例如,如果您将其设置为 text
,那么您每个 languages
的 text
属性 将用作该项目的值。但是,这实际上不会设置 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>
我的 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 documentation,item-value
属性定义 属性 名称用作每个项目的值。该道具的默认值为 'value'
,这意味着每个项目的 value
属性 将默认用作每个项目的值。例如,如果您将其设置为 text
,那么您每个 languages
的 text
属性 将用作该项目的值。但是,这实际上不会设置 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>