v-bem
v1.1.1
Published
Bem from vue.js custom dirrectives
Downloads
82
Maintainers
Readme
На русском
In English
На русском
Минималистичный плагин, позволяющий прописывать bem-классы элементам компонентов через диррективу v-bem
.
Установка
- С помощью yarn:
yarn add v-bem
- С помощю npm:
npm install v-bem
Подключение
import Vue from "vue";
import vBEM from "v-bem";
Vue.use(vBEM, {/*config*/});
config
Необязательный объект с параметрами, часть из которых соответствует списку Alternative BEM syntax в b_ (В квадратных скобках указаны дефолтные значения).
elementSeparator
: разделитель между блоком и элементом ["__"
].modSeparator
: разделитель между элементом|блоком и модификатором ["_"
].modValueSeparator
: разделитель между именем модификатора и его значением ["_"
].blockPrefix
: префикс перед именеим блока [""
].elementKey
: ключ значения в объекте модификаторов, используемого как имя блока ["__"
].directiveName
: имя диррективы (без префиксаv-
) ["bem"
].
Использование
Исключительно внутри компонентов, посредством диррективы, указавнной в настройках (по умолчанию v-bem
).
Замечание: во всех примерах ниже в качестве компонента используется popup
, отсюда и имя блока popup
.
Просто блок
<template>
<div v-bem></div>
</template>
<div class="popup"></div>
Элемент блока
Простейший случай
Указывается в качестве модификатора диррективы (в примере ниже это element
).
<template>
<div v-bem.element></div>
</template>
<div class="popup__element"></div>
Вычисляемое имя элемента
Имя переинной указывается в качестве аргумента диррективы.
<template>
<div v-bem:elem></div>
</template>
<script>
module.exports = {
computed: {
elem(){
return 'element-2';
}
},
}
</script>
<div class="popup__element-2"></div>
Через значение диррективы
Предусмотрен как резервный вариант. Имя блока нужно указать в объекте модификаторы с ключём, указанном в elementKey
настроек (по умолчанию __
).
<template>
<div v-bem="{'__': 'element', active: true}"></div>
</template>
<div class="popup__element popup__element_active"></div>
Модификатор блока
Указывается в виде строки или объекта в значении диррективы.
<template>
<div v-bem="'active'"></div>
</template>
<div class="popup popup_active"></div>
Пример с объектом:
<template>
<div v-bem="{theme: 'big', active: true}"></div>
</template>
<div class="popup popup_theme_big popup_active"></div>
В значении диррективы можно укзать любое выражение, например объект, содержажий вычисляемые свойства.
<template>
<div v-bem="{theme}"></div>
</template>
<script>
module.exports = {
computed: {
theme(){
return 'small';
}
},
}
</script>
<div class="popup popup_theme_small"></div>
Модификатор элемента
Полностью аналогичен модификатору блока, только в модификаторе диррективы передается имя блока.
<template>
<div v-bem.button="'active'"></div>
</template>
<div class="popup__button popup__button_active"></div>
Использование внутри Pug
В базовом варианте pug не позволяет указывать атрибуты без значения: парсит в запись вида атрибут="атрибут"
, что собственно не верно. Для формировани класса блока (или элемента) без модификаторов нужно указывать пустой объект модификаторов.
<template lang="pug">
<div v-bem="{}"></div>
</template>
<div class="popup"></div>