Как можно настроить директиву так, чтобы она срабатывала только на конкретный элемент (фильтр), а не на все элементы сразу? Как использовать атрибут :key для этой цели?
Директива :key используется для определения уникального идентификатора элемента в списке, чтобы Vue мог эффективно обновлять и перерисовывать только те элементы, которые были изменены.
Чтобы использовать директиву :key в пользовательском компоненте, вы можете просто добавить её к элементу списка или другому элементу, который должен иметь уникальный идентификатор. Например:
```html
<template>
<div>
<div v-for="item in items" :key="item.id">
{{ item.name }}
</div>
</div>
</template>
```
Чтобы настроить директиву так, чтобы она срабатывала только на конкретный элемент (фильтр), вам нужно добавить атрибут :key к этому элементу с уникальным идентификатором. Например:
```html
<template>
<div>
<input type="text" v-model="filter" :key="filter">
<div v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</div>
</div>
</template>
```
В этом примере элемент с фильтром будет перерисовываться только при изменении его значения. Элементы списка будут обновляться в соответствии с новым фильтром.
напиши директиву отдельно от компонента и потом повесь на нужный элемент.
import {Directive, DirectiveBinding} from "vue"; export const clickOutside: Directive<HTMLElement, string> = { mounted(el: HTMLElement, bind: DirectiveBinding) { if(bind.value) { window.addEventListener('click', (e) => { if(!el.contains(<HTMLElement>e.target)) { bind.value() } }) } }, unmounted: function (el: HTMLElement, bind: DirectiveBinding) { if(bind.value) { window.removeEventListener('click', (e) => { if(!el.contains(<HTMLElement>e.target)) { bind.value() } }) } } }
Это общая директива. И затем вешаешь на любой компонент какой нужен на корневой div
<div v-click-outside="() => isFilterOpen = false"> .... </div>
А твоя директива закрывает все сразу компоненты, потому что это логично. Если она работает на всех твоих фильтрах, то клик вне конкретного фильтра - его закрывает. Соответственно если у тебя открыты все сразу фильтры и ты кликнешь ГДЕ УГОДНО на странице, то закроются все фильтры сразу.
Конечно, если кликнуть на фильтре вместо "где угодно", то закроются все фильтры кроме того, на котором ты кликнул