const initialState = {
first: 0,
second: 0,
};class CounterAction implements Action {
constructor(public type: ActionTypes, public payload: string) {}
}function counterReducer(state = initialState, action: CounterAction) {
switch (action.type) {
case ActionTypes.Increment:
return {
...state,
[action.payload]: state[action.payload] + 1,
};
...<div *ngFor="let item of count$ | async | keyvalue">
<button (click)="increment(item.key)">Increment</button>
<div>Current Count: {{ item.value }}</div>
<button (click)="decrement(item.key)">Decrement</button>
<button (click)="reset(item.key)">Reset Counter</button>
</div>increment(key) {
this.store.dispatch(new CounterAction(ActionTypes.Increment, key));
}
...
function foo(...args) {
console.log(args[N]);
}function foo() {
console.log(arguments[N]);
}function foo(...{ [N]: x }) {
console.log(x);
}
selectedServices() {
return this.services.reduce((acc, n) => (n.checked && acc.push(n.title), acc), []);
},<ul>
<li v-for="n in selectedServices">{{ n }}</li>
</ul>selectedServices() {
return this.services.filter(n => n.checked);
},<ul>
<li v-for="n in selectedServices">{{ n.title }}</li>
</ul>sum() {
return this.selectedServices.reduce((acc, n) => acc + n.cost, 0);
},
const cards = Array.from(
document.querySelectorAll('[data-component="card"]'),
n => new Card(n)
);constructor(el) {
if (typeof el === 'string') {
return Array.from(document.querySelectorAll(el), n => new Card(n));
}
// дальше всё по-старомуconst cards = new Card('[data-component="card"]');
:filter="filterDebet".хочу фильтровать по нескольким значениям
data: () => ({
selected: null,
...
}),<tr v-for="(n, i) in (selected || objSearch)">@click="selected = selected ? null : { [i]: n }".hidden {
visibility: hidden;
}<tr
v-for="(n, i) in objSearch"
:class="{ hidden: selected !== null && selected !== i }"
>@click="selected = selected === null ? i : null"
overflow: scroll или overflow-y: scroll.
Подозреваю, что виноват ".parents()"
.closest('.block') или .parent().next('.slider-btns').
<input type="text" value="0.00">document.querySelector('input').addEventListener('keypress', function(e) {
e.preventDefault();
this.value = this.value.replace(/(0)(?!.*\1)/, e.key);
});
computed: {
sum() {
return this.selected.reduce((acc, n) => acc + +n, 0);
},
},<v-checkbox
class="light--text"
v-model="service.checked"
:label="`${service.cost} руб.`"
></v-checkbox>computed: {
sum() {
return this.services.reduce((acc, n) => acc + n.cost * n.checked, 0);
},
},
computed: {
minStart() {
return Math.min(...this.competitors.map(n => n.start));
},
maxSpeed() {
return Math.max(...this.competitors.map(n => n.speed));
},
},<tr v-for="{ start, speed } in competitors">
<td :class="{ best: start === minStart }">{{ start }}</td>
<td :class="{ best: speed === maxSpeed }">{{ speed }}</td>
</tr>