mounted() { console.log(this.props)
onClick : () => { console.log(this.props);
if(num=>5&&num<=10){
=>
- никакой это не оператор сравнения.true
. <transition-group name="slide" tag="div" class="table-body">
<div class="table-tr" v-for="item in items" :key="item.id">
<div class="table-td">{{ item.id }}</div>
<div class="table-td">{{ item.user }}</div>
</div>
</transition-group>
.table-tr {
transition: 0.5s;
}
.table-body {
overflow: hidden;
}
.slide-enter-from {
transform: translateY(-100%);
}
.slide-enter-to {
transform: translateY(0);
}
const handlers = new Map();
function updateHandler(el, binding) {
el.removeEventListener('input', handlers.get(el));
const handler = () => {
const value = el.value.replace(/\D/g, '').slice(0, binding.value);
if (value !== el.value) {
el.value = value;
el.dispatchEvent(new Event('input'));
}
};
handler();
handlers.set(el, handler);
el.addEventListener('input', handler);
}
Vue.directive('maxlen', {
bind: updateHandler,
update: updateHandler,
unbind(el) {
el.removeEventListener('input', handlers.get(el));
handlers.delete(el);
},
});
<input type="number" v-maxlen="2">
page - 1
и page + 1
. xAxes: [{
и yAxes: [{
на x: {
и y: {
.format: 'DD/MM/YYYY'
. Нужное вам свойство называется иначе, замените на parser: 'DD/MM/YYYY'
.scaleLabel: {
(как и его внутреннее содержимое) - смотрите сами. methods: {
onCellClick(item) {
console.log(item.digit);
},
<td @click="onCellClick(item)">
$grouped = [];
foreach ($arr as $key => $items) {
$group = [
'UF_SUBJECT' => $items[0]['UF_SUBJECT'],
'UF_QUANTITY' => 0,
'UF_BRAK' => 0,
'UF_WAREHOUSENAME' => [],
];
foreach ($items as $item) {
$group['UF_QUANTITY'] += $item['UF_QUANTITY'];
$group['UF_BRAK'] += $item['UF_BRAK'];
$group['UF_WAREHOUSENAME'][] = $item['UF_WAREHOUSENAME']." (".$item['UF_QUANTITY']." шт)";
}
$group['UF_WAREHOUSENAME'] = implode(', ', $group['UF_WAREHOUSENAME']);
$grouped[$key] = $group;
}
сбрасывается на 0 и начинает отсчет с предыдущего состояния
const pick = (obj, keys) => Object.fromEntries(keys.map(k => [ k, obj[k] ]));
const newArr = arr.map(n => pick(n, keys));
const pick = (obj, keys) =>
Object.fromEntries(Object.entries(obj).filter(m => keys.includes(m[0])));
// или
const pick = (obj, keys) =>
keys.reduce((acc, n) => (obj.hasOwnProperty(n) && (acc[n] = obj[n]), acc), {});
a
, показывать пытаетесь img
.document.querySelectorAll('.photos img').forEach(n => {
n.parentNode.style.display = +n.alt === alt ? '' : 'none';
});
per_page
integer
The number of results per page (max 100).
Default:30
function getTimes(start, end, interval) {
const [ s, e ] = [ start, end ].map(n => moment(n, 'HH:mm'));
const result = [];
if (s > e) {
e.add(1, 'day');
}
for (; s <= e; s.add(interval, 'minutes')) {
result.push(s.format('HH:mm'));
}
return result;
}
function getTimes(start, end, interval) {
const [ s, e ] = [ start, end ].map(n => new Date(`2000-01-01 ${n}`));
const result = [];
if (s > e) {
e.setDate(e.getDate() + 1);
}
for (; s <= e; s.setMinutes(s.getMinutes() + interval)) {
result.push(s.toTimeString().split(':', 2).join(':'));
// или
result.push(s.toLocaleTimeString('ru', {
hour: '2-digit',
minute: '2-digit',
}));
}
return result;
}
const times = getTimes('10:00', '18:00', 30);
. interface IFormData {
firstName: string;
lastName: string;
}
const [ formData, setFormData ] = React.useState<IFormData>({
firstName: '',
lastName: '',
});
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => setFormData({
...formData,
[e.target.name]: e.target.value,
});
<CustomTextField name="firstName" value={formData.firstName} onChange={onChange} />
<CustomTextField name="lastName" value={formData.lastName} onChange={onChange} />
<!-- или -->
{Object.entries(formData).map(([ k, v ]) => (
<CustomTextField key={k} name={k} value={v} onChange={onChange} />
))}
async function fetchRepos(username) {
let result = [];
try {
result = (await axios.get(`https://api.github.com/users/${username}/repos`)).data;
} catch(e) {
console.error(e);
}
setRepos(result);
}
<Search onSearch={fetchRepos} />
function Search({ onSearch }) {
const [ searchValue, setSearchValue ] = useState('');
function onSubmit(e) {
e.preventDefault();
onSearch(searchValue);
}
return (
<form onSubmit={onSubmit}>
<input
type="text"
value={searchValue}
onChange={e => setSearchValue(e.target.value)}
/>
<button>Найти</button>
</form>
)
}
const valueAndClass = [
[ 'yes', 'bg-success' ],
[ 'no', 'bg-warning' ],
];
document.querySelector('table').addEventListener('change', e => {
for (const td of e.target.closest('tr').cells) {
for (const [ value, className ] of valueAndClass) {
td.classList.toggle(className, value === e.target.value);
}
}
});
bg-primary
у ячеек, добавьте его строкам, а обработчик события change пусть будет таким, например:document.querySelector('table').addEventListener('change', ({ target: t }) => {
const tr = t.closest('tr');
valueAndClass.forEach(n => tr.classList.toggle(n[1], n[0] === t.value));
});
const $container = $('.promo__cats');
$container.append(...$container
.children()
.get()
.map(n => [ n, +$('.promo__price', n).text().replace(/\D/g, '') ])
.sort((a, b) => a[1] - b[1])
.map(n => n[0])
);