Задать вопрос

Как правильно изменить свойство у родительского компонента, при обходе всех элементов в дочернем компоненте?

Прошу сразу прощения. Очень сложно дается после jQuery окунуться в реактивность и во vue.

К примеру есть один компонент BaseComponent. При отрисовки списка подключается второй, которому передается параметр "classGroup", как при определенном условии обхода списка в дочернем компоненте присвоить "classGroup" какое либо значение.

Вот первый компонент

<template>
    <div>
        <ul>
            <li
                v-for="item in items"
                v-bind::key="item.id">
                {{ item.name }}
                <ChildComponent v-if="item.inner" v-bind:itemInner="item.inner" v-bind: classGroup ="classGroup" />
            </li>
        </ul>
    </div>
</template>

<script>
import ChildComponent from "./ChildComponent";
export default {
    name: "BaseComponent",
    components: {
        ChildComponent
    },
    data() {
        return {
            classGroup: 'class1',
            items: [
                {
                    id: 1,
                    name: 'name1'
                }, {
                    id: 2,
                    name: 'name2',
                    inner: [
                        {
                            id: 5,
                            name: 'name5'
                        }, {
                            id: 6,
                            name: 'name6'
                        }
                    ]
                }, {
                    id: 3,
                    name: 'name3'
                }, {
                    id: 4,
                    name: 'name4'
                }
            ]
        }
    }
}
</script>


И второй компонент ChildComponent

// Вот тут то и вопрос где и как правильно мне осуществить проверку к примеру (id=4). 
// Грубо говоря:  this. classGroup = (item.id == 4) ? 'class2' : 'class3';
// Если это делается через method, то как вызвать этот метод (в какой конструкции) при отрисовки "itemInner" ?

<template>
    <ul>
        <li
            v-for="item in itemInner"
            :key="item.id" >
            {{ item.name }}
        </li>
    </ul>
</template>

<script>
export default {
    name: "ChildComponent",
    props: {
        itemInner: {},
        classGroup: {}
    }
}
</script>


Если же я вообще не правильно подхожу, подскажите в каком направлении ошибку допускаю.
  • Вопрос задан
  • 201 просмотр
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@V0vash
В дочернем, стоит сделать вычисляемое свойство но основании которого будем наделять элем-т классами

<div v-bind:class="classObject"></div>

data: {
  isActive: true,
  error: null
},
computed: {
  classObject: function () {
    return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal'
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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