@Megionec

Как добавить свойство checked по условию входящих данных?

Пытаюсь разобраться с vue. У меня с бэка приходят данные в json:
{
"id": 1,
"name_method": "Роджерса - Даймонд",
"category_id": 1,
"favorites": 1
},
{
"id": 2,
"name_method": "Шкала депрессии Бека",
"category_id": 1,
"favorites": 0
},
Мне нужно в зависимости от значения "favorites" установить checked.

<div v-for="method in methodsType">
    <div v-if="method.category_id === id">
        <input id="name" type="checkbox" role="switch"
             v-model="methodId"
             v-bind:value="method.id"
             class="form-check-input">
         <label for="name" class="form-check-label">{{ method.name_method }}</label>      
      </div>
</div>


export default {
    name: "IndexComponent",
    data() {
        return {
            methodsType: null,
            methodId: [],
            id: 1,
        }
    },
    mounted() {
        this.getMethods()
    },
    methods: {
        getMethods() {
            axios.get('/api/method/favorites/')
                .then(res => {
                    this.methodsType = res.data.methods;
                })
        },
},
}
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега Vue.js
Тлен
У тебя проблема не в vue, а в базовом html:
Оба input у тебя получают одинаковый id и оба label одинаковый for. Поведение браузера при клике на label в таком случае не определено, но на практике это значит, что клик идёт всегда первому input.

Соответственно надо сделать либо так:
<label class="form-check-label">
  <input 
    type="checkbox" 
    role="switch"
    v-model="methodId"
    :value="method.id"
    class="form-check-input" 
  />
  {{ method.name_method }}
</label>

Либо как-то так:
<input 
  :id="`input-${method.id}`" 
  type="checkbox" role="switch"
  v-model="methodId"
  :value="method.id"
  class="form-check-input" 
/>
<label :for="`input-${method.id}`" class="form-check-label">
  {{ method.name_method }}
</label>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы