강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

임성민님의 프로필 이미지
임성민

작성한 질문수

로컬스토리지..? 활용방법에 대해 아시는분 계신가요..?

작성

·

308

0

안녕하세요.

궁금한게 있어 문의드립니다.

현재 리스트 작성 페이지를 만들고 잇는데, 서버 연동은 안된상태입니다.

다만 서버연동없이..?

json 데이터를 저장할수가 잇다고 하는데 혹시 어떻게 해야 할지 알수 잇을까요..?

현재는

var list = [ { id: 300, name: '대성갈비', old: 18000, email: '백반', status: 'ㄱ월요일 휴일', birthday: '2018-04-12' }, { id: 500, name: '세븐갈비', old: 20000, email: '갈비', status: 'ㄱ월요일 휴일', birthday: '2018-04-1' }, { id: 400, name: '퍼니주', old: 10000, email: '오므라이스', status: 'ㄴ화요일 휴일', birthday: '2018-04-11' }, { id: 200, name: '멘야코노하', old: 18000, email: '돈까스', status: 'ㄴ화요일 휴일', birthday: '2018-04-12' }, { id: 150, name: '춘배버거', old: 18000, email: '햄버거', status: 'ㄷ수요일 휴일', birthday: '2018-04-12' }, { id: 150, name: '술래감자탕&순대국', old: 18000, email: '감자탕', status: 'ㄹ목요일 휴일', birthday: '2018-04-12' }, { id: 7, name: '빠오즈푸', old: 18000, email: '돈까스', status: 'ㄱ연중무휴', birthday: '2018-04-12' }, { id: 8, name: '하늘분식', old: 18000, email: '갈비', status: 'ㄱ연중무휴', birthday: '2018-04-12' }, { id: 9, name: '서울숲쭈꾸미', old: 18000, email: '쭈꾸미', status: 'ㄱ연중무휴', birthday: '2018-04-12' } ]; Vue.component('modal', { template: '#modal-template' }); new Vue({ el: '#ssfcrud', data: { list: list, item: {}, checkedList: [], filterToggle: false, filterByName: [], filterByStatus: [], sortById: false, sortByName: false, sortByOld: false, sortByStatus: false, sortByEmail: false, notification: false, showModal: false, modalType: 0, isFormValid: false }, computed: { listView: function () { var self = this; if (self.filterByName.length > 0 || self.filterByStatus.length > 0) { return self.list.filter(function(item) { return self.filterByName.indexOf(item.name) > -1 || self.filterByStatus.indexOf(item.status) > -1; }); } else { return self.list; } }, checkedAll: { get: function () { var self = this; if (self.checkedList.length > 0) { return self.listView.length == self.checkedList.length; } else { return false; } }, set: function (val) { var self = this; self.checkedList = []; if (val) { for (var i = 0; i < self.listView.length; i++) { self.checkedList.push(self.listView[i].id); } } else { self.checkedList = []; } } } }, watch: { sortById: function (val) { var self = this; self.listView = self.sortBy(self.listView, 'id', val); }, sortByName: function (val) { var self = this; self.listView = self.sortBy(self.listView, 'name', val); }, sortByOld: function (val) { var self = this; self.listView = self.sortBy(self.listView, 'old', val); }, sortByEmail: function (val) { var self = this; self.listView = self.sortBy(self.listView, 'email', val); }, sortByStatus: function (val) { var self = this; self.listView = self.sortBy(self.listView, 'status', val); } }, methods: { sortBy: function(array, param, reverse) { var filterA, filterB; return array.sort(function (a, b) { switch (param) { case 'id': filterA = a.id; filterB = b.id; break; case 'name': filterA = a.name; filterB = b.name; break; case 'old': filterA = a.old; filterB = b.old; break; case 'status': filterA = a.status; filterB = b.status; break; } if (reverse) { return (filterA > filterB) ? 1 : -1; } else { return (filterA < filterB) ? 1 : -1; } }); }, checkEmailValid: function (email) { var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email); }, openModal: function (item) { var self = this; if (item) { self.item = item; self.modalType = 2; } else { self.item = { id: self.list[self.list.length - 1].id + 1, name: null, old: null, email: null, status: 'created' }; self.modalType = 1; } self.showModal = true; }, submit: function (item) { var self = this; if (item.id == null || item.name == null || item.old == null || item.email == null || !self.checkEmailValid(item.email)) { self.isFormValid = true; } else { if (self.modalType == 1) { self.list.push(item); } else if (self.modalType == 2) { self.list.find(function (value, index) { if (value.id == item.id) { self.list[index] = item; } }); } else { return; } self.item = {}; self.showModal = false; } }, deleting: function (index) { var self = this; var confirmDelete = confirm("Are you sure to delete this?"); if (confirmDelete) { self.list.splice(index, 1); } } }, filters: { getDayOfBirthday(val) { var temp = val.slice(4); var toYear = new Date().getFullYear(); var thisBirthday = toYear + temp; var _getDay = new Date(thisBirthday).getDay(); var todayDays = ['Chu Nhat', 'Thu 2', 'Thu 3', 'Thu 4', 'Thu 5', 'Thu 6', 'Thu 7']; return todayDays[_getDay]; } } });

이와같이 구성되어있고 삭제 누르면 삭제는 되는데 새로고침하면 다시 데이터가 원복되는 상황입니다...

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.
로컬스토리지를 활용하면 웹 브라우저 내부에 데이터를 저장하여 서버 연동 없이도 데이터를 사용할 수 있습니다.
JSON 데이터를 저장할 경우, 로컬스토리지에 데이터를 저장하려면 JSON.stringify() 메소드로 JSON 데이터를 문자열로 변환한 후, 로컬스토리지의 setItem() 메소드를 사용하여 저장해야 합니다.

예를 들어, 작성하신 데이터를 로컬스토리지에 저장하고 싶다면 다음과 같은 코드로 저장할 수 있습니다.

localStorage.setItem('list', JSON.stringify(list));

저장된 데이터를 불러오기 위해서는 getItem() 메소드와 JSON.parse() 메소드를 이용하면 됩니다.

var listFromStorage = JSON.parse(localStorage.getItem('list'));

위와 같이 코드를 작성하면, 변수 listFromStorage에 로컬스토리지에 저장된 데이터를 불러올 수 있습니다.

참고로, 로컬스토리지는 도메인, 브라우저 등에 따라 저장 용량이 제한될 수 있습니다. 따라서 데이터 용량을 고려하여 적절한 방식으로 활용하시는 것이 좋습니다.

마지막으로, 만약 프로젝트가 복잡해진다면 서버 연동을 고려하시는 것이 좋습니다. 감사합니다.

임성민님의 프로필 이미지
임성민

작성한 질문수

질문하기