首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何自动选择Vue 3下拉菜单中的第一个选项

如何自动选择Vue 3下拉菜单中的第一个选项
EN

Stack Overflow用户
提问于 2022-06-23 20:36:29
回答 2查看 470关注 0票数 1

我有两个下拉菜单,第二个根据第一个下拉菜单的选择来改变值。

我所要做的就是将第二个下拉列表的第一个值设置为默认选择,而不管第一个下拉列表中的选项是什么。

目前,第二个下拉列表的默认选择始终是空的。

我尝试从types中获取值,并通过v-foroption标记上加载它们并设置:selected="index===0",但也没有工作。

演示:https://codesandbox.io/s/relaxed-flower-2hjox1?file=/src/App.vue

模板

代码语言:javascript
运行
复制
<div class="col-md-6">
  <label for="type" class="form-label">Type</label>
  <select id="type" class="form-select" v-model="form.type">
      <option value="en-US" selected>English (US)</option>
      <option value="en-GB">English (British)</option>
  </select>
</div>
<div class="col-md-6">
  <label for="selected" class="form-label">Option 2</label>
  <div v-if="form.type === 'en-GB'">
      <select id="selected" name="selected" class="form-select" v-model="form.selected">
          <option value="Arsenal">Arsenal</option>
          <option value="Chelsea">Chelsea</option>
          <option value="Liverpool">Liverpool</option>
      </select>
  </div>
  <div v-else-if="form.type === 'en-US'">
      <select id="selected" name="selected" class="form-select" v-model="form.selected">
          <option value="Lakers">Lakers</option>
          <option value="Bulls">Bulls</option>
          <option value="Mavericks">Mavericks</option>
      </select>
  </div>
</div>

Javascript

代码语言:javascript
运行
复制
export default {
  name: "App",
  data() {
    return {
      form: {
        type: 'en-GB',
        selected: ''
      },
      types: {
        american: ['Lakers', 'Bulls', 'Mavericks'],
        british: ['Arsenal', 'Liverpool', 'Chelsea']
      }
    }
  },
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-23 20:57:04

代码语言:javascript
运行
复制
const app = Vue.createApp({
  data() {
    return {
      form: {
        type: "en-GB",
        selected: "",
      },
      types: {
        american: ["Lakers", "Bulls", "Mavericks"],
        british: ["Arsenal", "Liverpool", "Chelsea"],
      },
    };
  },
  watch: {
    'form.type': {
      handler() {
        this.form.selected = this.form.type === "en-GB" ? this.types.british[0] : this.types.american[0]
      },
      immediate: true
    }
  }
})
app.mount('#demo')
代码语言:javascript
运行
复制
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
<div id="demo">
  <div class="col-md-6">
    <label for="type" class="form-label">Type</label>
    <select id="type" class="form-select" v-model="form.type">
      <option value="en-US" selected>English (US)</option>
      <option value="en-GB">English (British)</option>
    </select>
  </div>
  <div class="col-md-6">
    <label for="selected" class="form-label">Option 2</label>
    <div v-if="form.type === 'en-GB'">
      <select
        id="selected"
        name="selected"
        class="form-select"
        v-model="form.selected"
      >
        <option value="Arsenal">Arsenal</option>
        <option value="Chelsea">Chelsea</option>
        <option value="Liverpool">Liverpool</option>
      </select>
    </div>
    <div v-else-if="form.type === 'en-US'">
      <select
        id="selected"
        name="selected"
        class="form-select"
        v-model="form.selected"
      >
        <option value="Lakers">Lakers</option>
        <option value="Bulls">Bulls</option>
        <option value="Mavericks">Mavericks</option>
      </select>
    </div>
  </div>
</div>

您可以为第二个select创建观察者并设置默认值:

代码语言:javascript
运行
复制
watch: {
  'form.type': {
    handler() {
      this.form.selected = this.form.type === "en-GB" ? this.types.british[0] : this.types.american[0]
    },
    immediate: true
  }
}
票数 1
EN

Stack Overflow用户

发布于 2022-06-23 21:01:20

我要做的就是将第二个下拉列表的第一个值设置为默认选择,而不管第一个下拉列表中的选项是什么。

添加一个监视器,它监视form.type,然后从types中选择第一项

注意,我已经将american键更改为您使用的type键,然后可以循环这些选项,如果您没有这样的选项,那么无论如何您都需要映射对象typeMap: {'en-US': 'american', 'en-GB': 'british' } . types[typeMap[form.type]]

代码语言:javascript
运行
复制
new Vue({
  el: '#app',
  data() {
    return {
      form: {
        type: 'en-GB',
        selected: ''
      },
      types: {
        'en-US': ['Lakers', 'Bulls', 'Mavericks'],
        'en-GB': ['Arsenal', 'Liverpool', 'Chelsea']
      }
    }
  },
  watch: {
    'form.type' () {
      this.form.selected = this.types[this.form.type][0]
    }
  }
})
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.15/vue.js"></script>

<div id="app">
  <div class="col-md-6">
    <label for="type" class="form-label">Type</label>
    <select id="type" class="form-select" v-model="form.type">
      <option value="en-US" selected>English (US)</option>
      <option value="en-GB">English (British)</option>
    </select>
  </div>
  <div class="col-md-6">
    <label for="selected" class="form-label">Option 2</label>
    <select id="selected" name="selected" class="form-select" v-model="form.selected">
      <option v-for="name in types[form.type]">{{ name }}</option>
    </select>
  </div>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72736282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档