1 minute read


localStorege에 저장하기

  • JSON.stringify() : object 객체를 string으로 변환
  • JSON.parse() : string을 object로 변환

localstorege에서 items string을 가져와 object로 변환한다.

const items = JSON.parse(localStorage.getItem("items")) || [];

변환한 items 객체에 입력한 value == object를 추가해준후 json string으로 변환해 localstorage에 저장한다.

let object = {
  text: addItems.querySelector('input[type="text"]').value,
  done: false,
};
items.push(object);
localStorage.setItem("items", JSON.stringify(items));

[localstorage 결과]

image

ul list에 추가하기

items 객체를 돌아가면서 li를 생성해서 ul에 추가해주었다.

cnt를 이용해서 item을 구별할수 있는 키를 만들었다.

function setItems() {
  let ulist = "";
  let cnt = 0;
  items.forEach((item) => {
    ulist += `<li>
            <input type="checkbox" data-index="${cnt}" id="item${cnt}">
            <label for="item${cnt++}">${item.text}</label>
        </li>`;
  });
  itemsList.innerHTML = ulist;
}

image

마지막으로 체크박스 선택 여부만 localstorage에 적용하면 된다.

checkbox의 data-index속성을 이용해 index을 알아와서 checked여부를 적용해준다.

checkbox를 체크하면 실행하기 위해 checkbox에 click이벤트를 적용한다.

itemsList.querySelectorAll('li input[type="checkbox"]').forEach((chk) => {
  chk.addEventListener("click", clickChk);
});
function clickChk(e) {
  items[e.target.dataset.index].done = e.target.checked;
  localStorage.setItem("items", JSON.stringify(items)); //localstorage에 적용
}

그리고 변경된 localstorage의 check여부를 화면에도 적용시켜 주어야 한다.

따라서 위의 setItems함수를 수정한다. 체크박스 선택여부 item.done이 true이면 checked !!

ulist += `<li>
            <input type="checkbox" data-index="${cnt}" id="item${cnt}" ${
  item.done ? "checked" : ""
}>
            <label for="item${cnt++}">${item.text}</label>
 </li>`;

image

새로 알게된 것

HTMLElement.dataset

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset

[예시]

<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>
  John Doe
</div>
const el = document.querySelector("#user");

// el.id === 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'johndoe'
// el.dataset.dateOfBirth === ''

완성본

이 곳에서는 안돌아가는것 같습니다. 코드만! 확인