實作一個 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);
}
}