.menu
, но зато без js.:) export const useStore = defineStore("Stores", () => {
const Json = reactive([
{
id: 1,
value: 0,
addPlus(id) {
this.value = this.value + 1;
},
addMinus(id) {
if (this.value > 0) {
this.value = this.value - 1;
}
},
image: "../img/juice_Ides.png",
quantity: "В наличии 5 шт",
name: "Хлеб Крестянский, 400г",
price: "56",
currency: "руб",
basket: "В корзину",
descr:
"Мука пшеничная хлебопекарная первого сорта, вода, мука ржаная хлебопекарная сеяная, сахар-песок, соль поваренная пищевая, солод ржаной, экстракт солодовый.",
},
{
id: 2,
value: 0,
addPlus(id) {
this.value = this.value + 1;
},
addMinus(id) {
if (this.value > 0) {
this.value = this.value - 1;
}
},
image: "../img/bread.png",
quantity: "В наличии 3 шт",
name: "Белый хлеб, 400г",
price: "59",
currency: "руб",
basket: "В корзину",
descr: "Белый хлеб",
}
]);
const Store = JSON.parse(localStorage.getItem("Json") ?? '{}');
Json.forEach((item) => {
if(Store[item.id] !== item.value)
item.value = Store[item.id];
});
watch(
Json,
(state) => localStorage.setItem("Json", JSON.stringify(
// сохраняем мы объетк вида {id: value}, потому что индексы в массиве нифига не надёжны
state.reduce((acc, item) => {
acc[item.id] = item.value;
return acc;
}, {})
)),
{ deep: true }
);
return {
Json,
};
});
preview it locally with npx serve .output/public
Нет смысла мучаться с "файловым" вариантом, если конечно не стоит какая-то мега-цель. Это потребует серьёзной ручной переработки, с которой никто вам не поможет потому что нафиг никому не надо.const validateNotEmpty = val => {
try {
if (!val) {
throw new Error();
}
}
catch(e) {
throw e;
}
}
class Oppa {
rules = [
validateNotEmpty
];
idisuda = true;
getCheckData() {
return this.idisuda;
}
constructor() {
this.checkError = ()=> {
const checkData = this.getCheckData();
for (let rule of this.rules) {
try {
rule(checkData);
}
catch (e) {
return e;
}
}
return null;
};
this.updateCheckingState = ()=> {
this.error = this.checkError();
this.cleared = false;
this.checked = true;
return this;
};
}
}
const nuka = new Oppa();
nuka.idisuda = true;
nuka.updateCheckingState()
console.log('getCheckData', nuka.idisuda,'isError', nuka.error instanceof Error)
nuka.updateCheckingState()
console.log('getCheckData', nuka.idisuda,'isError', nuka.error instanceof Error)
nuka.updateCheckingState()
console.log('getCheckData', nuka.idisuda,'isError', nuka.error instanceof Error)
nuka.idisuda = false;
nuka.updateCheckingState()
console.log('getCheckData', nuka.idisuda,'isError', nuka.error instanceof Error)
nuka.updateCheckingState()
console.log('getCheckData', nuka.idisuda,'isError', nuka.error instanceof Error)
nuka.updateCheckingState()
console.log('getCheckData', nuka.idisuda,'isError', nuka.error instanceof Error)
Если очень хочется, то, конечно, можно, но это плохая практика из-за возможных конфликтов с такими же энтузиастами либо новыми стандартными методами в следующих версиях языка.
Для чего-то своего, то принято делать свой же класс(можно наследоваться от стандартного):