В колонках где tbody я смог реализовать
<template slot="isActive" slot-scope="{ item }">
<b-form-checkbox v-model="item.isActive"></b-form-checkbox>
</template>
но вот в thead не получается
true
, если все чекбоксы true
; сеттер - назначаете всем чекбоксам переданное значение:checkedAll: {
get() {
return this.items.every(n => n.isActive);
},
set(val) {
this.items.forEach(n => n.isActive = val);
},
},
<template slot="HEAD_isActive" slot-scope="data">
<b-form-checkbox
@click.native.stop
:checked="checkedAll"
@change="checkedAll = $event"
></b-form-checkbox>
</template>
add() {
const clone = this.clone.cloneNode(true);
clone.dataset.index = this.index++;
this.beforeInsert.before(clone);
}
.filter-values
класс лучше переключать у их самых дальних не общих предков, т.е., у .material-block
. В этом случае не надо искать внутри контейнера элемент, у которого должен быть переключен класс, а если в будущем захотите внутри открытого .material-block
стилизовать ещё какой-то элемент, то не придётся переписывать js-код.- .material-block .filter-values.open {
+ .material-block.open .filter-values {
const containerSelector = '.material-block';
const buttonSelector = `${containerSelector} .catalog-filter-block-title`;
const activeClass = 'open';
$(document).on('click', ({ target: t }) => {
const $container = $(t).closest(containerSelector);
const $button = $(t).closest(buttonSelector);
if ($button.length) {
$container.toggleClass(activeClass);
}
$(containerSelector).not($container).removeClass(activeClass);
});
document.addEventListener('click', ({ target: t }) => {
const container = t.closest(containerSelector);
const button = t.closest(buttonSelector);
if (button) {
container.classList.toggle(activeClass);
}
document.querySelectorAll(containerSelector).forEach(n => {
if (n !== container) {
n.classList.remove(activeClass);
}
});
});
.expanded
). Гуглите "делегирование".click(false)
не годится в качестве отмены действия по умолчанию - надо сделать нормальный обработчик, в котором выполнять preventDefault
. Типа так (ну или тоже через делегирование, но это как-то глупо будет выглядеть - два обработчика одного события, хотя мог бы быть и один). ни одно из вышеперечисленных условий симметричности не выполняется
$('.break-word').html((i, html) => {
const [ a, b, c ] = html.split(' ');
return `${a} ${b}<br>${c}`;
});
document.querySelectorAll('.break-word').forEach(n => {
n.innerHTML = n.innerText.replace(/(.+ .+) /, '$1<br>');
});
category.id === this.$route.params.category
$route.params.category
? И не получается ли так, что вы пытаетесь сравнивать значения разных типов? - скажем, category.id
является числом, а params.category
строкой. почему-то не отрабатывает ни один из хуков
Object.entries(comments).reduce((acc, [ k, v ]) => v.parent === null ? { ...acc, [k]: v } : acc, {})
Object.values(comments).reduce((acc, n) => (n.parent === null && (acc[n.id] = n), acc), {})
<button class="click-count">click me</button>
<button class="click-count">click me</button>
<button class="click-count">click me</button>
document.addEventListener('click', ({ target: t }) => {
if (t.classList.contains('click-count')) {
t.innerText = (t.innerText | 0) + 1;
}
});
// или
const onClick = e => e.target.textContent = -~e.target.textContent;
document.querySelectorAll('.click-count').forEach(n => n.addEventListener('click', onClick));