【问题标题】:Set default value to option select menu将默认值设置为选项选择菜单
【发布时间】:2017-04-28 13:39:11
【问题描述】:

我想将自定义属性绑定到选项选择菜单。 <option> 标记将仅具有 selected="selected" 属性

<template>
  <div>
    <select>
      <option v-for="" v-bind:selected="[condition ? selected : notSelected]" value="">{{ resource.xprm_name }}</option>
    </select>
  </div>
</template>

data: {
  selected: "selected",
  notSelected: ""
}

这不起作用,但如果我将v-bind:selected 更改为v-bind:class,那么它会接收到适当的类,所以逻辑是有效的,但不适用于selected 属性。

有什么方法可以让它与这些自定义属性一起工作?

【问题讨论】:

    标签: vue-component vue.js vuejs2


    【解决方案1】:

    您可以使用v-model 在选择框上选择默认值:

    标记:

    <div id="app">
      <select v-model="selected">
         <option value="foo">foo</option>
         <option value="bar">Bar</option>
         <option value="baz">Baz</option>
      </select>
    </div>
    

    查看模型:

    new Vue({
      el: "#app",
      data: {
        selected: 'bar'
      }
    });
    

    这是 JSFiddle:https://jsfiddle.net/Lxfxyqmf/

    【讨论】:

    • 如何在data(){} function 中使用它?我尝试过的任何事情都没有奏效,我已经使用几种不同的方式和 VueJs2 文档在 SO 上查看了几个线程。 Select Basic Usage
    • @Chris22 应该是data: function () { return { selected: 'bar' } }
    • 如果您只想选择第一个索引,您将如何实现这一点。 IE。您不知道返回的结果,所以只需自动选择第一个结果。
    【解决方案2】:

    html:

    <div id="myComponent">
        <select v-model="selectedValue">
            <option v-for="listValue in valuesList" :value="listValue">
                {{listValue}}
            </option>
        </select>
        <span>Chosen item: {{ selectedValue }}</span>
    </div>
    

    js:

    var app = new Vue({
        el: '#myComponent',
        data: {
            selectedValue: 'Two',
            valuesList: ['One', 'Two', 'Three']
        },
    

    【讨论】:

    • 当您只想选择默认值并且不想使用v-model时,可以认为此答案是正确的。
    • @GustavoStraube 即使您使用 v-model,我也没有看到它选择默认选项。将它与 v-model 一起使用可以选择默认值
    【解决方案3】:

    我创建了一个可重用的 select 组件,它也将 modelValue 发送到父组件。

    如果您查看第一个选项标签,您可以看到我是如何使用道具创建默认值的。

    BaseSelect.vue(子组件)

    <template>
      <label v-if="label">{{ label }}</label>
      <select
        class="field"
        :value="modelValue"
        v-bind="{
          ...$attrs,
          onChange: ($event) => {
            $emit('update:modelValue', $event.target.value);
          },
        }"
      >
        <option value="" disabled>{{ defaultValue }}</option>
        <option
          v-for="option in options"
          :key="option"
          :value="option"
          :selected="option === modelValue"
        >
          {{ option }}
        </option>
      </select>
    </template>
    
    <script>
    export default {
      props: {
        label: {
          type: String,
          default: ""
        },
        defaultValue: {
          type: String,
          default: "Select an item of the list",
          required: false
        },
        modelValue: {
          type: [String, Number],
          default: "Otros"
        },
        options: {
          type: Array,
          required: true
        },
      },
    };
    </script>
    

    父组件

    <BaseSelect
          label="Asunto"
          defaultValue = "Selecciona un asunto" 
          v-model="contactValues.asunto"
          :options="asuntos"
        />
    

    请注意,您必须在 data() (v-model) 中正确接收此值

    【讨论】:

      【解决方案4】:

      使用新的组合 API (vuejs 3):

      <template>
           <select v-model="selectValue">
               <option value="a">
                   Option a
               </option>
               <option value="b">
                   Option b
               </option>
            </select>
      </template>
      
      <script>
      import { ref } from 'vue';
      
      export default {
          setup() {
              // Create a reactive value for our select
              const selectValue = ref('a');
      
              // Return to the template
              return { selectValue };
          },
      };
      </script>
      

      【讨论】:

      • 问题被标记为 Vue2(虽然技术上组合 API 可以与该版本一起使用)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      相关资源
      最近更新 更多