computed: {
isFilledAll() {
return Object.values(this.user_inputs).every(n => n.isFilled);
},
},isFilledAll() {
return Object.values(this.user_inputs).every(n => Object.values(n).every(m => m !== null));
}
findIndex(item => item.id = id)Что стоит доизучить?
addToCart(state, id) {
state.cartItems.push(state.products.find(n => n.id === id));
},addToCart: (state, product) => state.cartItems.push(product),addToCart({ cartItems, products }, id) {
let product = cartItems.find(n => n.id === id);
if (!product) {
cartItems.push(product = {
...products.find(n => n.id === id),
quantity: 0,
});
}
product.quantity++;
},
shouldComponentUpdate(nextProps, nextState) {
return !this.state.updatesLocked || !nextState.updatesLocked;
}
Есть какой нибудь более удобный способ ?
.slice(-1)[0], получится так:masMain.slice(-1)[0].mas1.slice(-1)[0].mas2.push(objectDoc);masMain.at(-1).mas1.at(-1).mas2.push(objectDoc);.
const outerClass = 'item';
const innerClass = 'hidden';const hide = el => el.style.display = 'none';
// или
const hide = el => el.style.setProperty('visibility', 'hidden');
// или
const hide = el => el.style.cssText += 'opacity: 0';
// или
const hide = el => el.setAttribute('style', 'transform: scale(0)');
// или
const hide = el => el.hidden = true;document.querySelectorAll(`.${innerClass}`).forEach(n => {
if (n = n.closest(`.${outerClass}`)) {
hide(n);
}
});
// или
for (const n of document.getElementsByClassName(outerClass)) {
if (n.querySelector(`.${innerClass}`)) {
hide(n);
}
}.item:has(.hidden) {
display: none;
}
как это правильно называется
div с различными background-color, один вложен в другой, у родительского ширина 100%, у дочернего - в зависимости от текущего значения.
const obj = eval(`(${document.querySelector('.link').dataset.test})`);JSON.parse использовать, пишите в атрибут корректный json, надо заменить одинарные кавычки на двойные, а само значение атрибута в одинарных писать:data-test='{"test1": "1", "test2": "2", "test3": "903", "test4": "4"}'
в идеале, чтобы каждое нажатие на ссылку делало один поворот по часовой стрелке на 90 градусов
.rotate0 { transform: rotate(0deg); }
.rotate90 { transform: rotate(90deg); }
.rotate180 { transform: rotate(180deg); }
.rotate270 { transform: rotate(270deg); }<a href="#" data-rotate="-1">Повернуть на -90 градусов</a>
<a href="#" data-rotate="+1">Повернуть на +90 градусов</a>const photo = document.querySelector('.photo');
const classes = [ 'rotate0', 'rotate90', 'rotate180', 'rotate270' ];
let index = 0;
document.addEventListener('click', function(e) {
const rotate = +e.target.dataset.rotate;
if (rotate) {
photo.classList.remove(classes[index]);
index = (index + rotate + classes.length) % classes.length;
photo.classList.add(classes[index]);
}
});а можно пример, чтобы поворачивать по 1 градусу и в обратную сторону
style.transform:<a href="#" data-rotate="-1">rotate ccw</a>
<a href="#" data-rotate="+1">rotate cw</a>const photo = document.querySelector('.photo');
let angle = 0;
document.querySelectorAll('[data-rotate]').forEach(n => n.addEventListener('click', onClick));
function onClick({ target: { dataset: { rotate } } }) {
angle = (angle + +rotate + 360) % 360;
photo.style.transform = `rotate(${angle}deg)`;
}
можно как-то, грубо говоря, весь изменяемый объект наверх посылать
@change="onChange"methods: {
onChange(e) {
this.userProps[e.name] = e.val;
}
}
messageNode.classList.add('error-message');self.formElement.querySelectorAll('.error-message').forEach(n => n.remove(n));
что не так в скрипте
можно ли его сделать проще
document.querySelector('#play').addEventListener('change', e => {
document.querySelector('.block').style.opacity = +e.target.checked;
});#play:checked ~ div > .block {
opacity: 1;
}
Это нормально...
...или можно как то его оставить что бы не рендерит по новой?