Помогите пожалуйста написать учебный пример чтобы было видно действие и выгода инкапсуляции стилей. Мой вариант тут.
непонятно какое действие осуществляет метааргумент encapsulation: ViewEncapsulation.NoneЕсть корневой элемент и есть вложенный элемент. В каждом из них я отключил инкапсуляцию, но в результате к обоим применяются стили из первого. Где логика?
computed: {
categories() {
return this.$store.state.main_page.NEWS.map(n => ({
value: n.id,
label: n.name,
}));
},
},
deleteRow={() => this.deleteRow(i)}deleteRow(index) {
const productsList = [...this.state.productsList];
productsList.splice(index, 1);
this.setState({
productsList,
});
}
const grouped = data
.reduce((acc, n, i, a) => {
if (i && n.id === a[i - 1].id + 1) {
acc[acc.length - 1][1][1] = n.id;
} else {
acc.push([ [], [ n.id ] ]);
}
acc[acc.length - 1][0].push(n);
return acc;
}, [])
.reduce((acc, n) => {
acc[n[1].join('-')] = n[0];
return acc;
}, {});
dateStart: {
get() {
return moment().subtract(1, this.selectedPeriod).toDate();
},
set(value) {
// ну, тут вам виднее, какой должен код быть
},
},
modalRun = (modalState) => {
this.setState((prevState) => {
return {
modal: {
...prevState.modal,
state: modalState,
},
};
});
}
$('input').on('input', function() {
const
$this = $(this),
newVal = +$this.val(),
oldVal = +$this.data('oldVal') || 0;
if (oldVal !== newVal) {
console.log(`новое ${['больше', 'меньше'][+(oldVal > newVal)]}`);
}
$this.data('oldVal', newVal);
});
Как я понимаю, при клике я каждый раз вызываю функцию и переменная val опять принимает значение равное нулю?
.value-btn-plus и .value-btn-minus, сами обработчики срабатывают в порядке подключения, поэтому в value-text последним будет записано значение val, к которому имеет доступ последний же подключенный обработчик - т.е. 0, или что там у вас.$(document).on('click', '.value-btn-plus, .value-btn-minus', function() {
const $this = $(this);
const change = $this.hasClass('value-btn-plus') ? 1 : -1;
$this
.closest('.input-box')
.find('.value-text')
.text((i, text) => Math.max(0, +text + change));
});document.addEventListener('click', ({ target: t }) => {
const change = +t.matches('.value-btn-plus') || -t.matches('.value-btn-minus');
if (change) {
const valueEl = t.closest('.input-box').querySelector('.value-text');
valueEl.innerText = Math.max(0, +valueEl.innerText + change);
}
});
new RegExp('^\\d+$')const numberValidator = str => /^\d+$/.test(str);
// можно и наоборот - вместо проверки, что все символы являются цифрами,
// убедиться, что отсутствует хотя бы один не являющийся цифрой
const numberValidator = str => !/\D/.test(str);
Про let слышал, но нужно сделать без него
for (var i = 0; i < 10; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000);
})(i);
}for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(+this);
}.bind(i), 1000);
}for (var i = 0; i < 10; i++) {
setTimeout(console.log, 1000, i);
}for (var i = 0; i < 10; i++) {
setTimeout(new Function(`console.log(${i})`), 1000);
}for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(10 - i--);
}, 1000);
}
<div class="container">
<div class="yellow"></div>
<textarea></textarea>
</div>.container {
display: inline-flex;
width: 200px;
height: 400px;
flex-direction: column;
border: 10px solid red;
}
.yellow {
background: yellow;
flex-grow: 1;
}
textarea {
background: #47f;
line-height: 20px;
resize: none;
}const textarea = document.querySelector('textarea');
textarea.addEventListener('input', function() {
const maxHeight = 300;
const height = 20 * this.value.split('\n').length;
this.style.height = `${Math.min(height, maxHeight)}px`;
});
textarea.dispatchEvent(new Event('input'));
из-за того, что при первичном рендере input №2 не существует, на него не применяется библиотека VeeValidate
при нажатии значение меняется у объекта для фильтрации... но не обновляет таблицу
Angular ignores changes within (composite) objects.
$('.pups').each(function() {
this.innerHTML -= -2;
});
// или
$('.pups').text((i, text) => Number(text) + 2);
// или
document.querySelectorAll('.pups').forEach(n => {
n.innerText = -~-~n.innerText;
});
// или
for (const n of document.getElementsByClassName('pups')) {
n.textContent = parseInt(n.textContent) + 2;
}
import { query, animateChild } from '@angular/animations';animations: [
trigger('parentAnimation', [
transition(':leave', [
query('@itemAnim', [
animateChild()
])
])
]),
trigger('itemAnim', [
transition(':enter', [
animate(500)
]),
transition(':leave', [
group([
animate('0.5s ease', style({ transform: 'translateY(-20%)', 'height':'0px' })),
animate('0.5s 0.2s ease', style({ opacity: 0 }))
])
])
])
]