ракета пролетела всю длину экрана и вышла за пределы экрана(тут мой скрипт при помощи splice удаляет ракету из массива ракет)
this.rockets.length -= this.rockets.reduce((acc, n, i, a) => {
a[i - acc] = n;
if (n.type === 'right' && this._isCollideFlyLeft(n)) {
this.flyLeft.energy -= 10;
} else if (n.type === 'left' && this._isCollideFlyRight(n)) {
this.flyRight.energy -= 10;
} else if (0 < n.xCoord && n.xCoord + n.width < this.fieldEl.offsetWidth) {
n.move();
return acc;
}
return acc + 1;
}, 0);
updatePost(title: string, url: string, id:number): void { const update: Picture[] = this.collection.map((p)=>{ p.id = id; p.title = title; p.url = url }); }
Object.assign(this.collection.find(n => n.id === id), { title, url });editPost(picId: Picture[]): void { this.edData = picId; }
<button (click)="updatePost(titleEd.value, urlEd.value, edData.id);
Работает, если в вместо this.$refs.form.submit() написать setTimeout(()=>this.$refs.form.submit(), 0) . Но как будет правильнее в этом случае.
И почему вообще так происходит?
:model="MainForm" должно быть :model="MainForm.dynamicValidateForm".:rules="rules" замените на :rules="rules.value".а могу я сослаться:model="MainForm"в главной форме, а в props передатьdynamicValidateForm
:prop="`dynamicValidateForm.domains.${index}.value`"
v-if / v-else). Как-то так:<input v-if="input" v-model="name" @keypress.enter="onEnter">
<span v-else v-text="name" @click="onClick"></span>data: () => ({
name: '',
input: true,
}),
methods: {
onEnter() {
if (this.name) {
this.input = false;
}
},
onClick() {
this.input = true;
},
},
const extend = (target, source) => Object
.entries(source instanceof Object ? source : {})
.reduce((acc, [ k, v ]) => {
acc[k] = v instanceof Object ? extend(acc[k], v) : k in acc ? acc[k] : v;
return acc;
}, target instanceof Object ? target : {});
extend(patient, donor);
А как это сделать из компонента, а не из корневого экземпляра VUE?
Наверное нужно создать массив, куда помещать id продукта и данные с инпутов...
<input v-model="product.count" name="count" type="text" placeholder="Количество">
<input v-model="product.comment" name="comment" type="text" placeholder="Примечание">
const id = Math.max(0, ...this.collection.map(n => n.id)) + 1;
const onInput = () => $button.prop('disabled', !$inputs.get().every(n => $(n).val()));
const $button = $('селектор кнопки');
const $inputs = $('селектор инпутов').on('input', onInput);
onInput();const button = document.querySelector('селектор кнопки');
const inputs = [...document.querySelectorAll('селектор инпутов')];
const onInput = () => button.disabled = inputs.some(n => !n.value);
inputs.forEach(n => n.addEventListener('input', onInput));
onInput();
$('#name').on('input', function() {
$('.cell').text(i => this.value[i] || '');
});document.querySelector('#name').addEventListener('input', e => {
document.querySelectorAll('.cell').forEach((n, i) => {
n.textContent = e.target.value.charAt(i);
});
});
arr.map(n => ({
id: n.id.value,
title: n.title.value,
slug: n.slug.value
}))arr.map(n => Object.entries(n).reduce((acc, [ k, v ]) => (acc[k] = v.value, acc), {}))arr.map(n => Object.keys(n).reduce((acc, k) => ({ ...acc, [k]: n[k].value }), {}))arr.map(n => Object.assign({}, ...Object.values(n).map(m => ({ [m.title.toLowerCase()]: m.value }))))
.wrap:.wrap-active {
transform: translateY(-100%);
}$('.wrap').on('click', 'a', function(e) {
e.preventDefault();
$(e.delegateTarget).toggleClass('wrap-active');
});.wrap добавляем скрытый чекбокс:<input type="checkbox" id="toggle" hidden><a href="#">Day</a> ---> <label for="toggle">Day</label><a href="#">Night</a> ---> <label for="toggle">Night</label>.wrap не при наличии дополнительного класса, а если чекбокс перед ним выставлен:.wrap-active { ---> #toggle:checked + .wrap {
$("td.price").text()$(this).closest('tr').find('td.price').text()const sum = $items => $items.get().reduce((acc, n) => acc + +$(n).text(), 0);
function update($el, change) {
const $tr = $el.closest('tr');
const $count = $tr.find('.quantity-field').val((i, val) => Math.max(1, (val | 0) + change));
$tr.find('.sum').text($count.val() * $tr.find('.price').text());
$tr.nextAll('.total-tr').first().find('span').text(sum($tr
.add($tr.prevUntil('.total-tr'))
.add($tr.nextUntil('.total-tr'))
.find('.sum')
));
$table.find('.total-summ span').text(sum($table.find('.total-tr span')));
}
const $table = $('table')
.on('click', '.button-plus, .button-minus', function() {
const $btn = $(this);
update($btn, +$btn.hasClass('button-plus') || -$btn.hasClass('button-minus'));
})
.on('input', '.quantity-field', function() {
update($(this), 0);
});
$table.find('.quantity-field').trigger('input');const sum = items =>
Array.prototype.reduce.call(items, (acc, n) => acc + +n.textContent, 0);
function update(el, change) {
let tr = el.closest('tr');
const count = tr.querySelector('.quantity-field');
count.value = Math.max(1, (count.value | 0) + change);
tr.querySelector('.sum').innerText = count.value * tr.querySelector('.price').innerText;
const rows = [];
let total = tr;
for (; !(total = total.nextElementSibling).matches('.total-tr'); rows.push(total)) ;
for (; tr && !tr.matches('.total-tr'); rows.push(tr), tr = tr.previousElementSibling) ;
total.querySelector('span').innerText = sum(Array.from(rows, n => n.querySelector('.sum')));
table.querySelector('.total-summ span').innerText = sum(table.querySelectorAll('.total-tr span'));
}
const table = document.querySelector('table');
table.addEventListener('input', e => update(e.target, 0));
table.addEventListener('click', ({ target: t }) => {
const change = +t.matches('.button-plus') || -t.matches('.button-minus');
if (change) {
update(t, change);
}
});
table.querySelectorAll('.quantity-field').forEach(n => {
n.dispatchEvent(new Event('input', { bubbles: true }));
});
const links = [
'https://youtu.be/fi5LDM9ppuc',
'https://www.youtube.com/embed/fi5LDM9ppuc',
];
const newLinks = links.map(n => `https://www.youtube.com/watch?v=${n.split('/').pop()}`);