Front-End ์์ ์ค/Vue.js(22)
-
[Vue.js] Vue-Cookies
๐ Vue-Cookie ๐ฝ ๊ฐ์ Cookie๋ Browser(Client์ Local)์ ์ ์ฅํ๋ ์์ ์ ์ฅ์ ๊ฐ์ ๊ฒ์ด์์. Cookie ์ญ์ ๋ฑ์ ํ๊ฒ ๋๊ฑฐ๋, ๋ง๋ฃ์ผ์ด ์ง๋๊ฒ ๋๋ฉด ์ญ์ ํ ์ ์๋ต๋๋ค! Cookie ์ธ์ `localStorage`, `sessionStorage` ๋ฑ Local์ ์ฌ์ฉํ๋ ์ ์ฅ์๋ค์ด ๋ ์๋ ๊ฒ์ด์์. ์ฐธ๊ณ ๋ก Cookie๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด Data๋ Browser์๋ ์ ์ฅ๋์ง๋ง, Server์๋ ์ ์ฅ ๋์ง ์๋ ๊ฒ์ด์์. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ๊ด๋ จ๋ ์ ๋ณด๋ ์ ๋ ๋ฃ์ผ๋ฉด ์ ๋๋ ๊ฒ์ด์์. ์:) ๋น๋ฐ๋ฒํธ ์ฐธ๊ณ ๋ก `vue-cooke`์ด๋ `vue-cookies`๊ฐ ์กด์ฌํ๋๋ฐ, `vue-cookies`๊ฐ ๋ ๋์ค์ ์ด๊ณ , `Readme`๋ ์ ๋์ด ์์ด ์ฃผ๋ํ๋์ ์ด๊ฒ์ ์ด..
2022.04.02 -
[Vue.js] tiptap Editor ์ฐ๋
๐ tiptap Editor ์ด ์๋ํฐ๋ก ์์ฑ๋๋ ๋ด์ฉ์ Form์ textarea์ ์จ์ง๋ ๊ฒ์ด ์๋๊ณ div์ HTML๋ก ์จ์ง๊ณ ๋ฏธ๋ฆฌ ์ ์๋์ด ์๋ CSS Style๋ก ํํ๋ฅผ ๋ฐ๋ก๋ฐ๋ก ๋ณด์ฌ์ฃผ๋ ์์ธ๊ฒ ๊ฐ์ ๋ณด์ด๋ ๊ฒ์ด์์. ๋ ๋๋ฆฌ์ค๋ผ๋๊ฒ ์ด๋ฐ ๋ฐฉ์์ ๋งํ๋๊ฒ์ด ์๋๊ฐ ์๊ฐ์ด ๋๋ ๊ฒ์ด์์. Tiptap์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก CSS์คํ์ผ์ด ์ ์ ๋์ด ์์ง ์๋ค๊ณ ํฉ๋๋ค. ๋ณธ์ธ์ ๋ง๊ฒ ์ค์ ์ ํด์ผ ํ๋ ๊ฒ์ด์์. ๋ค๋ง ์ํ๋ก ์ ๊ณตํ๊ณ ์๋ css๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ ์๋ ์์ ๊ฒ ๊ฐ์ ๊ฒ์ด์์. ๐ฝ ์ค์น โ npm ์ด์ฉ ์ค์น npm install @tiptap/vue-3 @tiptap/starter-kit โ yarn ์ด์ฉ ์ค์น yarn add @tiptap/vue-3 @tiptap/starter-kit โ j..
2022.03.23 -
[Vue.js] Template refs
๐ ํ ํ๋ฆฟ refs๋? Props์ Event๊ฐ ์กด์ฌํ์ง๋ง, ์์ ์์์ JavaScript๋ฅผ ์ด์ฉํด ์ง์ ์ ๊ทผํด์ผ ํ ๋๊ฐ ์๋๋ฐ, ์ด ๋ `ref` ์์ฑ์ ์ด์ฉํด ์ฐธ์กฐ(Reference) ID๋ฅผ ์์ ์ปดํฌ๋ํธ๋, HTML ์์์ ๋ถ์ฌํจ์ผ๋ก ์ง์ ์ ๊ทผํ๊ฒ ํด ์ฃผ๋ ๊ฒ์ด์์. ์์ ๊ฐ์ด ์ปดํฌ๋ํธ๊ฐ Mount ๋์์ ๋, ํ๋ก๊ทธ๋๋ฐ ์ ์ผ๋ก input์ focus๋ฅผ ํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ๋ฑ์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด์์. const app = Vue.createApp({}) app.component('base-input', { template: ` `, methods: { focusInput() { this.$refs.input.focus() } }, mounted() { this.focusInput()..
2022.03.19 -
[Vue.js] Props
๐ Props ๐ฝ Props๋ก Data ์ ๋ฌ ๋ชจ๋ Component Instance๋ ์์ฒด ๊ฒฉ๋ฆฌ๋ ๋ฒ์๊ฐ ์๋ ๊ฒ์ด์์. ์ฆ, ํ์ ์ปดํฌ๋ํฐ์ ํ ํ๋ฆฟ์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฐธ์กฐ ํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ ๊ฒ ํด์๋ ์ ๋๋ ๊ฒ์ด์์. JAVA๋ก ๋น์ ํ์๋ฉด ๋คํ์ฑ๊ณผ ๊ฐ์ ๊ฒ์ธ ๊ฑฐ ๊ฐ์์. Data๋ `props` Option์ ์ด์ฉํ์ฌ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ ๋ ์ ์๋ ๊ฒ์ด์์. prop์ ์์ ์ปดํฌ๋ํธ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ง์ ํน์ฑ์ธ ๊ฒ์ด์์. ํ์ ์ปดํฌ๋ํธ๋ `props` option์ ์ด์ฉํ์ฌ ์์ ํ ๊ฒ์ผ๋ก ๊ธฐ๋๋๋ Props๋ฅผ ๋ช ์์ ์ ์ธํด์ผ ํ๋ ๊ฒ์ด์์. ์์ ์ฝ๋ Vue.component('child', { // props ์ ์ props: ['message'], // ๋ฐ์ดํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก..
2022.03.19 -
[Vue.js] axios ์ค์น
๐ Axios๋? JavaScript Application์์ Server ์ฆ, Back End์์ ํต์ ์ ํ๊ธฐ ์ํ HTTP Library๊ฐ ๋ฐ๋ก Axios๋ผ๋ ์น๊ตฌ์์. ์ด ์น๊ตฌ๋ Vue.js์ ์ข ์๋ ๊ฒ์ด ์๋๋ผ ๋ค๋ฅธ JavaScript Application ์ฆ, React.js ๋ฑ์๋ ์ด์ฉํ ์ ์๋ ๊ฒ์ด์์. Web์ด๋, App์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์ฐ๋ฆฌ๋ Data๋ฅผ ์ ์ฅํ๊ณ , ๋ถ๋ฌ์ค๊ธฐ ์ํด Back End Server๋ฅผ ๊ตฌ์ถํ๊ณ ์ด์ฉํด์ผ ํ๋ ๊ฒ์ด์์. Axios๋ Promise ๊ธฐ๋ฐ์ JavaScript ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ด์ฉํ๋ ๊ฒ์ด์์. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Request๋ฅผ ๋ณด๋ธ ๋ค .then()์ ์ด์ฉํด์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ์ ์ฒ๋ฆฌํ๋ ํ์์ผ๋ก ๊ตฌ์ฑ์ด ๋์ด ์๋ต๋๋ค. axios.get('/api/data..
2022.03.18 -
[Vue.js] vue-router.esm-bundler.js?ec2d:72 [Vue Router warn]: No match found for location with path "/support/devInquryList"
โ ๏ธ ๋ฌธ์ ๋ฐ์! ๋ถ๋ช ์์ ๊ฐ์ด ์ด์ฌํ ์ฝ๋ฉ์ ํด ๋์๋๋ฐ, Contents ๋ถ์ ๊ทธ ์ด๋ค ํ๋ฉด๋ ๋ณด์ด์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด์์. ๐ค ์์ธ ๋ถ์ ์ด ๋ฌธ์ ์ ๋ํด ๊ณฐ๊ณฐํ ์๊ฐ์ ํด๋ณด๋ App.vue์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด router๋ฅผ ํตํด์ Contents ๋ถ๋ฅผ Re Rendering์ ํ๋๋ฐ, DevInquryList.vue๋ Router์ ๋ํ ํน๋ณํ ์ค์ ์ ํ ๊ธฐ์ต์ด ์๋ ๊ฒ์ด์์. ์ญ์ ์ด๊ฒ์ด ๋ฌธ์ ์๋ ๊ฒ์ด์์! ์ด๊ฑด ๊ตฌ๊ธ๋ง ํ์ง๋ ์๊ณ ์ฐพ์๋ค์! ๐๐๐ ๐ป ๋ฌธ์ ํด๊ฒฐ! ์์ ๊ฐ์ด ํ๋ฉด์ด ์ถ๋ ฅ์ด ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ ๊ฒ์ด์์. ๋ณด์ด๋ ๊ฒ ์ฝ๊ฐ ์์ฑํด ๋ณด์ด๋ ๊ฒ์ Back End ์๋ฒ๊ฐ ๊บผ์ ธ ์์ด์ Data Bindding์ ๋ชปํ๊ธฐ ๋๋ฌธ์ด์์.
2022.03.15