Доброго вечера.
Сделал компонент аккордеона с использованием именованных слотов (не говорите, что есть лучше, просто на моей текущей галере принципиально пилят свои велосипеды). На мой взгляд, получилось очень удобно и красиво. Код реализации опущу (в рамках вопроса не суть важно), использование выглядит так:
<v-accordion
:items="addresses"
>
<template v-slot:item="{ item }">Item {{ item.id }}</template>
<template v-slot:content>
Lorem ipsum dolor sit amet, consectetur adipisicing elit
</template>
</v-accordion>
Все просто и прозрачно. Передаем массив элементов, имеем возможность установить произвольный элемент и его контент. Однако тимлид принял резко в штыки и предложил свой вариант.
<v-accordion>
<v-accordion-item v-for="item in items">
<div v-slot="title">
{{ item.title }}
</div>
<div>{{ item.content }}</div>
</v-accordion-item>
</v-accordion>
При этом плюсов в его решении не вижу в упор, а минусов масса:
- лишний импорт (v-accordion-item в каждом месте, где аккордион будет юзаться, и никак не обойти), в моем варианте v-accordion-item инкапсулирован в слот
- вытекает из п.1, лишние строчки в components компонента (у нас компоненты не регаются глобально)
- постоянно придется писать v-for, и в целом задавать тело аккордиона явно - разве не излишне?
- наверняка возникнет проблема стилизации контента. Поскольку там внутри дефолтного слота стоит эта кочерга "div item.content div", это значит, что нам придется либо обращаться к этому диву через nth-child (будем зависеть от структуры DOM, нехорошо), либо лепить каждый раз нужный класс (повторение кода, нехорошо), либо заводить v-accordion-content и импортировать еще и третий компонент. Три компонента, Карл, вместо одного! Разве это хорошо?
В общем, хочется понять, чем решение 2 объективно лучше решения 1, и лучше ли? Потому что пока, походу, подтверждается теория о том, что тимлид !== хороший программист. Аргументы самого тимлида звучат так: "ну можно же так сделать, и работает, правда? зачем чего-то городить?" и "я всегда так делал, мы так привыкли".
Заранее спасибо.