Что-то вроде этого должно работать, но если у вас есть только эти два поля, я не уверен, что попытался бы изменить его. Лучше просто быть явным с четырьмя методами.
import { LitElement, html } from 'lit-element';
class TypeSelect extends LitElement {
static get properties() {
return {
numAdults: {type: Number},
numChildren: {type: Number},
};
}
constructor() {
super();
this.numAdults = 1;
this.numChildren = 0;
this.validations = {
numAdults: {
min: 1,
max: 5
},
numChildren: {
min: 0,
max: 5
}
};
this.numPassengers = 1;
}
increment(e, countType) {
e.preventDefault();
if (this[countType] < this.validations[countType].max) this[countType]++;
}
decrement(e, countType) {
e.preventDefault();
if (this[countType] > this.validations[countType].max) this[countType]--;
}
createRenderRoot() {
return this;
}
render(){
return html`
<div class="counter">
<button @click="${(e) => this.decrement(e, 'numAdults')}"></button>
<span>${this.numAdults}</span>
<button @click="${(e) => this.increment(e, 'numAdults')}"></button>
</div>
<div class="counter">
<button @click="${(e) => this.decrement(e, 'numChildren')}"></button>
<span>${this.numChildren}</span>
<button @click="${(e) => this.increment(e, 'numChildren')}"></button>
</div>
`;
}
}
customElements.define('type-select', TypeSelect);
Если вы хотите провести рефакторинг, создайте дочерний компонент, который принимает параметры проверки и поддерживает локальный счет, так что TypeSelect
render
выглядит примерно так:
render(){
return html`
<type-counter name="adults" count="${this.numAdults}" min="1" max="5"></type-counter>
<type-counter name="children" count="${this.numChildren}" min="0" max="5"></type-counter>
`;
}