@Ohurmevshiy

Как связать модель товара и ее цвета?

Только начал изучать Vue.js. Подключил Vuetify.
Имеется массив объектов с параметрами товаров:
btnModelInfo: [
      {id: '1', name: 'model_1' , colors: ['white', 'blue', 'red']},
      {id: '2', name: 'model_2' , colors: ['red', 'green', 'blue']},
    ],
allColors: {
    white: '#ffffff',
    blue: "#0000ff ",
    red: #'ff0000',
    green: '#00ff00',
}

Нужно, чтобы по нажатию на кнопку с моделью, так же появлялись кнопки с цветами из массива colors в <v-btn-toggle>Потом, при нажатии на этот цвет, в карточке товара менялось изображение. Пока не впитал как это организовать.

<v-card>
          <v-card-title>Выберите модель</v-card-title>
            <v-btn-toggle class="mb-10">
              <v-btn color="#546E7A" :key="btn.id" v-for="btn in btnModelInfo">{{btn.name}}</v-btn>
            </v-btn-toggle>
<!-- Здесь должно менять изображение в зависимости от выбранного цвета-->          
            <v-btn-toggle>
              <v-btn :color="color" :key="i" v-for="(color, i) in allColors"></v-btn>  
            </v-btn-toggle>     
</v-card>

Поясните так же, пожалуйста, что значит mandatory проп во vuetify? Я не понял что он делает
  • Вопрос задан
  • 129 просмотров
Решения вопроса 2
Aetae
@Aetae Куратор тега Vue.js
Тлен
<v-card>
  <v-card-title>Выберите модель</v-card-title>
  <v-btn-toggle class="mb-10" v-model="currentButton">
    <v-btn color="#546E7A" :key="btn.id" v-for="btn in btnModelInfo">{{btn.name}}</v-btn>
  </v-btn-toggle>
  <!-- Здесь должно менять изображение в зависимости от выбранного цвета-->          
  <v-btn-toggle>
    <v-btn :color="color" :key="name" v-for="[name, color] in currentColors" @click="changeColor(name)"></v-btn>  
  </v-btn-toggle>     
</v-card>


{
  data() {
    return {
      btnModelInfo: [
        {id: '1', name: 'model_1' , colors: ['white', 'blue', 'red']},
        {id: '2', name: 'model_2' , colors: ['red', 'green', 'blue']},
      ],
      allColors: {
        white: '#ffffff',
        blue: "#0000ff ",
        red: '#ff0000',
        green: '#00ff00',
      },
      currentButton: null
    }
  },
  computed: {
    currentColors() {
      return this.currentButton === null ? [] : this.btnModelInfo[this.currentButton]
        .colors
        .map(name => [name, this.allColors[name]]);
    }
  },
  methods: {
    changeColor(color) {
      //Здесь должно менять изображение в зависимости от выбранного цвета
    }
  }
}
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега Vue.js
data: () => ({
  activeItem: null,
  items: [
    {
      id: 69,
      name: 'hello, world!!',
      colors: [ 'white', 'blue', 'red' ],
      color: null,
    },
    {
      id: 187,
      name: 'fuck the world',
      colors: [ 'red', 'green', 'blue' ],
      color: null,
    },
    {
      id: 666,
      name: 'fuck everything',
      colors: [ '#fb1', '#e2c', '#3a9', '#cb9' ],
      color: null,
    },
  ],
}),

<v-btn-toggle class="mb-10" v-model="activeItem">
  <v-btn color="#546E7A" v-for="n in items" :key="n.id" :value="n">
    {{ n.name }}
    <v-badge v-if="n.color" :color="n.color" bordered inline tile></v-badge>
  </v-btn>
</v-btn-toggle>
<v-spacer></v-spacer>
<v-btn-toggle v-if="activeItem" v-model="activeItem.color">
  <v-btn v-for="n in activeItem.colors" :key="n" :color="n" :value="n"></v-btn>
</v-btn-toggle>

https://jsfiddle.net/ud1o4y9L/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
сделайте вычисляемое свойство которое возвращает путь к картинке в зависимости от цвета
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы