
實作一個 LocalStorage 的紀錄菜單功能
先了解 LocalStorage(MDN):
localStorage 存入 localStorage.setItem('key', value) 、
localStorage 取出 localStorage.getItem('key')
製作點擊新增按鈕的事件
點擊新增按鈕觸發 function: addItem
function addItem(e) {}
addItems.addEventListener('submit', addItem);
因為是用 from 表單傳送會預設傳出去,阻止預設行為加上 perventDefault
function addItem(e) {
e.preventDefault();
}
輸入框的值加到陣列變數中 (function: addItem)
取得輸入框的值
const text = (this.querySelector('[name=item]')).value;
建立一個物件
const item = {
text, // es6 縮寫
done: false
};
用陣列方法 push 推到變數裡
items.push(item);
把 input 裡的文字刪除
this.**reset**(); // 此時的 this 是點擊到的 from
把輸入框打完的字呈現到畫面上
populateList 去處理它,使用 innerHTML , map , join 方法。populateList
checkbox ,使用 data-set , id , 三元運算子 ,確認綁定 id 和 for 兩者一致,之後用 data-set 找到值。function populateList(plates = [], platesList) {
platesList.innerHTML = plates.map((plate, index) => {
return `
<li>
<input type="checkbox" data-index=${index} id="item${index}" ${plate.done ? 'checked' : ''} />
<label for="item${index}">${plate.text}</label>
</li>
`
}).join('');
}
把資料儲存在 LocalStorage 這樣重新進入才會保留資料 (function: addItem)
使用 setItem(key, value)
localStorage.setItem('items', items);
LocalStorage 會看不懂物件所以要幫它轉
localStorage.setItem('items', JSON.stringify(items));
可以在視窗中查看 localStorage.getItem('items')
從資料庫取出
使用 getItem 取出,要變成原本的物件使用JSON.paese ,再賦予值給items 變數,如果沒有值就放空陣列
const items = JSON.parse(localStorage.getItem('items')) || [];
更新畫面
populateList(items, itemsList);
移除已完成事件
在選單中監聽 click 事件,如果有的話就觸發 function : toggleDone
itemsList.addEventListener('click', toggleDone)
**toggleDone**裡使用 matches 找到 input
input 裡使用 data-set 找到 index
index 裡使用 boolean .done 改變原本的狀態
更新 localStorage
更新畫面
function toggleDone(e) {
if (e.target.matches('input')) {
const el = e.target;
const index = el.dataset.index;
items[index].done = !items[index].done
localStorage.setItem('items', JSON.stringify(items));
populateList(items, itemsList);
}
}