Установить значение по умолчанию для меню выбора опций

Я хочу привязать пользовательский атрибут к меню выбора опций. <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 приписывать.

Есть ли способ заставить его работать с такими пользовательскими атрибутами?

4 ответа

Решение

Вы можете просто использовать 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/

HTML:

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

ЯШ:

var app = new Vue({
    el: '#myComponent',
    data: {
        selectedValue: 'two',
        valuesList: [
            {name: 'One', id: 1},
            {name: 'Two', id: 2},
            {name: 'Three', id: 3},
        ]
    },

Я создал многоразовый компонент select, который также передает значение modelValue родительскому компоненту.

Если вы посмотрите на первый тег option, вы увидите, как я создаю значение по умолчанию с помощью props.

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"
    />

Обратите внимание, что вы должны правильно получить это значение в своих данных () (v-модель)

Если вы используете композицию api

      <template>
<div class="select">
        <select v-model="selectedValue">
            <option value="abc">
                abc
            </option>
            <option value="cba">
                cba
            </option>
            
        </select>
    </div>
</template>

<script>
import { ref } from 'vue';

export default {
    setup() {
        const analyticsDays = ref('cba');

        return { analyticsDays };
    },
};
</script>
Другие вопросы по тегам