Belajar Menerapkan localstorage Pada TODO list Menggunakan Javascript
Dikesempatan kali ini, kita akan belajar bagaimana fungsi dari LocalStorage pada browser dan bagaimana cara penerapannya. untuk mempelajari localstorage ini saya akan meneruskan projek Membuat TODO list sederhana menggunakan javascript. Jadi jika ada yang masih bingung bisa pelajari postingan tentang pembuatan To Do list tersebut.
1. Apa itu local storage?
Local storage merupakan tempat di browser yang bisa digunakan utnuk menyimpan data dan data tidak akan hilang walaupun browser di close dan komputer di restart. Local storage sendiri bisa digunakan untuk menyimpan konfigurasi yang diperlukan
Untuk menjalankan Localstorage ini, pastikan Browser kalian support untuk penggunaan localstorage, umumnya browser terbaru seperti firefox, chrome, opera, edge memang sudah support untuk penggunaan local storage ini.
2. Contoh program
Langsung saja, kita akan menggunakan program TODO list sederhana menggunakan javascript kemarin, dengan kode seperti ini.
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Document</title> | |
</head> | |
<body> | |
<h1 class=""> membuat todo </h1> | |
<form action=""> | |
<label for="isi"> masukan isi</label> | |
<input type="text" name="isi" id="isi" class="isi"> | |
<input type="button" value="tambah" class="tambah" onclick="tambah()"> | |
</form> | |
<ul id="list"> | |
</ul> | |
<style> .done {text-decoration: line-through;} </style> | |
<script> | |
const box = document.querySelector('#list') | |
function tambah() { | |
let tex = document.querySelector('#isi') | |
console.log(tex) | |
let todo = "<li> <span onclick='toggle(this)'> "+ tex.value +"</span>" | |
+ "<span onclick='del(this)'> [X] </span>" + "</li>" | |
box.insertAdjacentHTML('afterbegin', todo) | |
tex.value ="" | |
} | |
function toggle(el) { | |
el.classList.toggle('done') | |
} | |
function del(el) { | |
el.parentElement.remove() | |
} | |
</script> | |
</body> | |
</html> |
pertama pada bagian paling atas javascript tambahkan 2 variabel tersebut. Fungsinya adalah pada variable todos digunakan untuk pendeklarasian objek kosong sebagai penapung. Sedangkan namast berfungsi sebagai penamaan localstorage nanti.
let todos = {} // definisi object kosong penampung
const namast = "STORAGE_TODO" // nama local storage (bebas)
Buat fungsi synclocaldata yang didalamnya terdapat perulangan switch.
function synclocaldata(activity, item, status =false) { | |
switch (activity) { | |
case 'ADD': | |
todos[item] = status // menambah/memperbarui array | |
break; | |
case 'UPDATE': | |
todos[item] = status // menambah/memperbarui array | |
break; | |
case 'DELETE': | |
delete todos[item] // menghapus array | |
break; | |
default: | |
break; | |
} | |
console.log(todos) // cek console | |
localStorage.setItem(namast, JSON.stringify(todos)) // menambah item ke localstorage | |
return | |
} |
Pada kode localStorage.setItem("nama_local", "value"); ini berfungsi untuk menyimpan data tadi kedalam penyimpanan lokal sementara pada browser.
Setelah itu, buat fungsi createlist() yang nanti akan berisi kode untuk menampilkan daftar list saat menambahkan data list.
function createlist(text, status) {
let isdone = (status) ? 'done' : ''
let todo = "<li> <span class='"+ isdone +"' onclick='toggle(this)'> "+ text +"</span>"
+ "<span onclick='del(this)'> [X] </span>" + "</li>"
box.insertAdjacentHTML('afterbegin', todo)
}
Jangan lupa tambahkan pemanggil fungsi
pada toggle() dan del() seperti ini
function toggle(el) {
let status = el.classList.toggle('done')
synclocaldata('UPDATE', el.innerText, status) //panggil update
}
function del(el) {
el.parentElement.remove()
synclocaldata('DELETE', el.previousElementSibling.innerText.trim()) // panggil delete, untuk mnghapus item localstorage yang dipilih
}
3. penutup
Dan inilah hasil akhir kode yang kita buat tadi.
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Document</title> | |
</head> | |
<body> | |
<h1 class=""> membuat todo </h1> | |
<form action=""> | |
<label for="isi"> masukan isi</label> | |
<input type="text" name="isi" id="isi" class="isi"> | |
<input type="button" value="tambah" class="tambah" onclick="tambah()"> | |
</form> | |
<ul id="list"> | |
</ul> | |
<style> .done {text-decoration: line-through;} </style> | |
<script> | |
let todos = {} // definisi object kosong penampung | |
const namast = "STORAGE_TODO" // nama local storage (bebas) | |
const box = document.querySelector('#list') | |
if(todofromlocal = localStorage.getItem(namast)) //percabangan apakah ada item di localstorage | |
{ | |
todos = JSON.parse(todofromlocal) // menyimpan data localstorage ke objek todos | |
for(let key in todos) { | |
createlist(key, todos[key]) // menampilkan list | |
} | |
console.log(todos) | |
} | |
function synclocaldata(activity, item, status =false) { | |
switch (activity) { | |
case 'ADD': | |
todos[item] = status // menambah/memperbarui array | |
break; | |
case 'UPDATE': | |
todos[item] = status // menambah/memperbarui array | |
break; | |
case 'DELETE': | |
delete todos[item] // menghapus array | |
break; | |
default: | |
break; | |
} | |
console.log(todos) // cek console | |
localStorage.setItem(namast, JSON.stringify(todos)) // menambah item ke localstorage | |
return | |
} | |
function tambah() { | |
let tex = document.querySelector('#isi') | |
console.log(tex) | |
let todo = "<li> <span onclick='toggle(this)'> "+ tex.value +"</span>" | |
+ "<span onclick='del(this)'> [X] </span>" + "</li>" | |
box.insertAdjacentHTML('afterbegin', todo) | |
synclocaldata('ADD', tex.value) | |
tex.value ="" | |
} | |
function createlist(text, status) { | |
let isdone = (status) ? 'done' : '' | |
let todo = "<li> <span class='"+ isdone +"' onclick='toggle(this)'> "+ text +"</span>" | |
+ "<span onclick='del(this)'> [X] </span>" + "</li>" | |
box.insertAdjacentHTML('afterbegin', todo) | |
} | |
function toggle(el) { | |
let status = el.classList.toggle('done') | |
synclocaldata('UPDATE', el.innerText, status) //panggil update | |
} | |
function del(el) { | |
el.parentElement.remove() | |
synclocaldata('DELETE', el.previousElementSibling.innerText.trim()) // panggil delete, untuk mnghapus item localstorage yang dipilih | |
} | |
</script> | |
</body> | |
</html> |
saatnya kita jalankan halaman pada browser dan coba tambahkan data lalu refresh halaman tersebut. Maka data Todo list yang kita buat tadi masih tersimpan dan tampil pada halaman tersebut.
No comments: