<li v-for="(val, key) in data" :some-data="key">{{ val }}</li>
Обновить не вариант, в проекте этот юзается(
Слишком много надо будет переписывать
в консоль выводится два значения, причём непонятно каким образом сформированные
Я вижу правильное выполнение так: <бла-бла-бла>
When all observables complete, emit the last emitted value from each.
const result = Array(arr.length);
for (let i = 0; i < arr.length; i++) {
result[i] = arr[i][0] || '';
}
// или
const result = [];
for (const [ n = '' ] of arr) {
result.push(n);
}
// или
const result = [];
while (result.length < arr.length) {
result[result.length] = arr[result.length].slice(0, 1);
}
// или
const result = arr.map(n => n.charAt(0));
#exampleModal {
.form-group {
display: none;
&.active {
display: block;
}
}
}
$('#exampleModal').on({
'show.bs.modal'(e) {
const recipient = e.relatedTarget.dataset.whatever;
$('.modal-title, button[type="submit"]', this).text(`Add ${recipient} in system`);
$(`.${recipient}`, this).addClass('active');
},
'hide.bs.modal'() {
$('.form-group.active', this).removeClass('active');
},
});
$('#exampleModal').on('show.bs.modal', function(e) {
const recipient = e.relatedTarget.dataset.whatever;
$('.modal-title, button[type="submit"]', this).text(`Add ${recipient} in system`);
$('.form-group', this).removeClass('active').filter(`.${recipient}`).addClass('active');
});
const labels = document.querySelectorAll('#price_block .change_model_iphone .item label');
const select = document.querySelector('#select_model');
const getFor = el => el.getAttribute('for');
// или
const getFor = el => el.attributes.for.value;
// или
const getFor = el => el.htmlFor;
// можно перезаписать разметку
select.innerHTML = Array
.from(labels, n => `<option value="${getFor(n)}">iPhone ${n.innerText}</option>`)
.join('');
// или, напрямую создавать новые элементы
select.append(...Array.prototype.map.call(
labels,
n => new Option(`iPhone ${n.textContent}`, getFor(n))
));
<div class="text">hello, world!!</div>
<div class="text">fuck the world</div>
<div class="text">fuck everything</div>
<select></select>
const texts = document.querySelectorAll('.text');
const select = document.querySelector('select');
select.append(...Array.from(texts, n => new Option(n.textContent)));
select.value = null;
select.addEventListener('change', ({ target: { selectedIndex } }) => {
texts.forEach((n, i) => n.classList.toggle('active', i === selectedIndex));
});
const select = document.querySelector('[name="select_model"]');
const radios = document.querySelectorAll('[name="model"]');
select.addEventListener('change', ({ target: { value } }) => {
Array.prototype.find.call(radios, n => n.value === value).checked = true;
});
radios.forEach(function(n) {
n.addEventListener('change', this);
}, e => select.value = e.target.value);
В компоненте так же прописано удаление "EventListener", но так как компонент сохраняет своё состояние (keep-alive), данный метод не удаляет "слушателя скролла".
<canvas width="400" height="400"></canvas>
const canvas = document.querySelector('canvas');
const w = canvas.width;
const h = canvas.height;
const ctx = canvas.getContext('2d');
ctx.translate(w / 2, h / 2);
ctx.fillStyle = 'red';
const steps = 30;
for (let i = 0; i < steps; i++) {
ctx.beginPath();
ctx.arc(w / 4, h / 4, 5, 0, 2 * Math.PI, false);
ctx.rotate(2 * Math.PI / steps);
ctx.fill();
ctx.closePath();
}
const classPrefix = 'toggle-';
.// вариант попроще - хватаем всё, что содержит указанную подстроку; так можно нарваться
// на выполнение бессмысленной работы, будут отобраны элементы, у которых ничего
// не будет удалено - это если подстрока находится не в начале класса, например xxx-toggle-xxx
const elements = document.querySelectorAll(`[class*="${classPrefix}"]`);
// вариант посложнее, поуродливее, но без обработки лишнего - хватаем элементы,
// у которых класс начинается с указанной подстроки, или содержит указанную подстроку,
// а перед ней ещё есть пробел
const elements = document.querySelectorAll(`[class^="${classPrefix}"], [class*=" ${classPrefix}"]`);
const reg = RegExp(`(^|\\s)${classPrefix}`);
elements.forEach(n => n.className = n.className.split(reg).join(' ').trim());
// или
elements.forEach(function(n) {
n.classList.value = n.classList.value.replace(this, '$1');
}, RegExp(`(^| )${classPrefix}`, 'g'));
// или
for (const { classList: cl } of elements) {
for (const n of [...cl]) {
if (n.startsWith(classPrefix)) {
cl.remove(n);
cl.add(n.slice(classPrefix.length));
}
}
}
$('#searchSity').autocomplete('search', '');
выводить содержимое данного тега в консоль...
<li v-for="n in items" @click="onClick(n)">
{{ n.message }}
</li>
methods: {
onClick(item) {
console.log(item.message);
}
}
...или в какой-то блок
<li v-for="n in items" @click="$emit('select', n)">
{{ n.message }}
</li>
<b-list @select="selected = $event"></b-list>
<div v-if="selected">{{ selected.message }}</div>
data: () => ({
selected: null,
...
})
shower[index] = !shower[index]
$set(shower, index, !shower[index])
data: () => ({
items: [
{ name: '...', show: false },
{ name: '...', show: false },
...
],
...
}),
<span @click="item.show = !item.show">{{ item.name }}</span>
<div class="dialog_show" v-if="item.show">{{ index }}</div>
const getValues = (obj, count) =>
count > 0
? Object.values(obj).slice(0, count)
: [];
function getValues(obj, count) {
const result = [];
for (const k in obj) {
if (result.length >= count) {
break;
} else if (obj.hasOwnProperty(k)) {
result.push(obj[k]);
}
}
return result;
}