๐Ÿ“• Language 87

[vuejs] ๋ผ์šฐํ„ฐ ์ด๋™ ์‹œ, ์Šคํฌ๋กค ์ด๋™

์Šคํฌ๋กค์ด ๋‚ด๋ ค๊ฐ„ ์ƒํƒœ์—์„œ, ๋ผ์šฐํ„ฐ๋กœ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๋•Œ ์ „ํ™˜๋œ ํŽ˜์ด์ง€์˜ ์Šคํฌ๋กค ์œ„์น˜๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ ํ•ด๊ฒฐ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. ๋ผ์šฐํ„ฐ ์ธ์Šคํ„ด์Šค์— ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ์—๋Š” ์Šคํฌ๋กค์„ ์ตœ์ƒ๋‹จ์œผ๋กœ ์˜ฌ๋ ค์•ผํ•ด์„œ ์ขŒํ‘œ๋ฅผ ์ €๋ ‡๊ฒŒ ์ฃผ์—ˆ๋‹ค. const router = new VueRouter({ ... scrollBehavior(to, from, savedPosition) { return { x :0, y: 0}; } }) ์ฐธ๊ณ  (์˜ˆ์‹œ์— top์„ 0์œผ๋กœ ์ฃผ๋ผ๊ณ  ์ ํ˜€์žˆ์œผ๋‚˜, ์—๋Ÿฌ ํ‘œ๊ธฐ๊ฐ€ ๋‚˜๊ธธ๋ž˜ x, y ์ขŒํ‘œ๋กœ ์ฃผ์—ˆ์Œ) https://router.vuejs.org/guide/advanced/scroll-behavior.html Vue Router | The official Route..

[Vuejs] <input> ํƒœ๊ทธ์— ์ž…๋ ฅํ•œ ์ „/ํ›„ value ๋ฐ›์•„์˜ค๊ธฐ (Vuejs get old value when on change event)

input ๋ฐ•์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ๊ธฐ์กด ๊ฐ’๊ณผ ์ƒˆ๋กญ๊ฒŒ ์ž…๋ ฅํ•œ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์ฒ˜์Œ์—” ํ•˜๋‹จ๊ณผ ๊ฐ™์ด v-model์— ๊ฑธ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์…‹ํŒ…ํ•œ ํ›„, @input ์ด๋ฒคํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ›์•„์˜ค๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ๊ณ„์†ํ•ด์„œ new ๊ฐ’๋งŒ ๋ฐ›์•„์˜ฌ ๋ฟ, old ๊ฐ’์€ ์ „๋‹ฌ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ธฐ์กด์ฝ”๋“œ ํ•ด๊ฒฐ v-model ๋Œ€์‹ , :value๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์…‹ํŒ…ํ•ด์ค€ ํ›„, @change ์ด๋ฒคํŠธ๋ฅผ ๊ฑธ์–ด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. input ์—˜๋ฆฌ๋จผํŠธ์—์„œ v-model์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋ฉฐ ์ž…๋ ฅ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์–‘๋ฐฉํ–ฅ ๋ชจ๋ธ ๋ฐ”์ธ๋”ฉ์ด ๋ฐ”๋กœ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, :value(v-bind)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— $event๋ฅผ ๊ฑธ์–ด target value๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„, ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋”ฐ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. v-model = v-..

[vuejs] route๋ฅผ ํ†ตํ•ด ๋ฐ›์€ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด param๊ฐ’, [Object object] ๋œจ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

Router๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜์„ ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒฝ์šฐ ๋ณดํ†ต ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. const pageNm = 'FileName'; const param = {}; const router = useRouter() router.push({ name: pageNm, params: param }); }) ๊ทธ๋ฆฌ๊ณ  ๋ฐ›์•„์˜ค๋Š” ์ชฝ์€ route๋ฅผ ์ด์šฉํ•˜์—ฌ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, param์—์„œ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ด๋‹ˆ ๋ฐ›๋Š” ์ชฝ์—์„œ ์ œ๋Œ€๋กœ ๊บผ๋‚ด์˜ค์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋ฉด ๋ฐ์ดํ„ฐ ์†ก์‹  ๋ถ€๋ถ„ const fileName = 'Page'; const param = { a : 'A', b : 'B', bundleData: { c : 'C', ..

[Javascript] ๋‚ ์งœ ํฌ๋งท ์ข…๋ฅ˜ (์˜ค๋Š˜, ์ด๋ฒˆ๋‹ฌ ๋ง, ํ•œ๋‹ฌ ์ „ ๋“ฑ)

์“ธ ๋•Œ ๋งˆ๋‹ค ์ฐพ์•„์•ผํ•ด์„œ ํ—ท๊ฐˆ๋ฆผ ์ผ๋‹จ ์—ฌ๊ธฐ์— ๋ชจ์•„๋†“๊ณ , ๊ณ„์† ์ถ”๊ฐ€ ์˜ˆ์ • 0. ๊ณตํ†ต ๋ฐ์ดํ„ฐ ํฌ๋งท ์œ ํ˜• (YYYY-MM-DD) const getFormatDate = (date) => { let month = date.getMonth() + 1; month = month >= 10 ? month : '0' + month; let day = date.getDate(); day = day >= 10 ? day : '0' + day; return date.getFullYear() + '-' + month + '-' + day; } 1. ์˜ค๋Š˜ getFormatDate(new Date()) 2. ์˜ฌํ•ด 1์›” 1์ผ getFormatDate(new Date(state.now.setFullYear(state.now.getFu..

[Javascript] Set

Set 1. ์ค‘๋ณต ๊ฐ’์ด ์—†๋Š” ์œ ์ผํ•œ ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ 2. ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์—†์Œ 3. index๋กœ ์ ‘๊ทผ ๋ถˆ๊ฐ€ 1. Set ๊ฐ์ฒด ์ƒ์„ฑ const set = new Set(); console.log(set); //Set(0) {} const set1 = new Set([1, 2]); //Set(2) {1,2} const set2 = new Set('hello'); //Set(4) {"h", "e", "l", "o"} โ€ป ๋ฐฐ์—ด์˜ ์ค‘๋ณต์ œ๊ฑฐ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ //๊ธฐ์กด const uniq = array => array.filter((v, i, self) => self.indexOf(v) === i); console.log(uniq([1, 1, 2, 2, 3])); // [1, 2, 3] //Set์ด์šฉ const uniq = ..

[javascript] ๋ฐฐ์—ด ์•ˆ ๊ฐ์ฒด ์š”์†Œ์˜ ๋ฌธ์ž์—ด ์กฐํ•ฉ

/** * 3๊ฐœ์˜ ํƒ€์ž… ์ค‘, 2๊ฐœ์˜ ํƒ€์ž… ์„ ํƒ ์‹œ ํ•ด๋‹น name ๊ฐ’ join์„ ์ด์šฉํ•ด ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋ฝ‘์•„์˜ค๊ธฐ */ const types =[ {name : '์ถ”์ฒœ', value : 1}, {name : '๋ฌถ์Œ', value : 2}, {name : '๋‹จ์ผ', value : 3} ]; const values = [1, 2]; let arr = []; for(let i in values) { const data = types.filter((item) => item.value === values[i]).map(item => item.name); for(let n in data) { arr.push(data[n]); } } console.log(arr.join()); // "์ถ”์ฒœ,๋ฌถ์Œ"

[vuejs] ์ด๋ฏธ์ง€ ์—…๋กœ๋“œํ•˜์—ฌ preview ์กฐํšŒ (FileReader ๋˜๋Š” URL.createObjectUrl ์‚ฌ์šฉ)

๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. (css๋Š” ๋ชจ๋‘ ์ œ๊ฑฐํ•œ ์ƒํƒœ์ด๋ฏ€๋กœ ๋ชจ์–‘์ด ์˜ˆ์˜์ง€ ์•Š์Œ) 1. FileReader()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• - ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. - base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ 2. URL.createObjectUrl()์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• - ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ์‹คํ–‰ ์†๋„๊ฐ€ ์กฐ๊ธˆ ๋” ๋น ๋ฅด๋‹ค. - hash ํ˜•ํƒœ์˜ url์„ ๋ฐ˜ํ™˜ โ–  FileReader ์‚ฌ์šฉ const uploadImg = (e) => { var input = e.target; if (input.files && input.files[0]) { //์‚ฌ์ง„ 1๊ฐœ์ธ ๊ฒฝ์šฐ (multiSelect ํ•˜๋ ค๋ฉด for๋ฌธ ๋Œ๋ ค์•ผํ•จ) var reader = new FileReader(); reader.onload = (e) => { state.imgUr..

[TypeScript] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TS) ๊ธฐ์ดˆ

์ƒˆ๋กœ ์˜ฎ๊ธด ํŒ€์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ด๋‹ค. ์˜ˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ญ๋“  ๋ฐฐ์›Œ๋‘๋ฉด ์ข‹์œผ๋‹ˆ๊นŒ โ–  ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript)๋ž€? ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์Šˆํผ์…‹(superset) ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด. ์ฆ‰, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ≥ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(์ดํ•˜ TS)๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํŠธ๋žœ์Šค ์ปดํŒŒ์ผ๋œ๋‹ค. 1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(์ดํ•˜ JS)๋Š” ๋งค์šฐ ๊ด€๋Œ€ํ•œ ์–ธ์–ด๋‹ค. ์ด์™€ ๋ฐ˜๋Œ€๋กœ TS๋Š” ์–ธ์–ด์— ๋ฏธ๋ฆฌ ํƒ€์ž…์„ ๋ถ€์—ฌํ•˜์—ฌ ์—„๊ฒฉํ•˜๊ฒŒ ๋ณ€์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ปดํŒŒ์ผ ์‹œ, ์—๋Ÿฌ๋ฅผ ์žก๊ธฐ์— ์šฉ์ดํ•˜๋‹ค. 2. ๋˜ํ•œ ์‹คํ–‰ ์†๋„ ์‹œ ์žฅ์ ์ด ์žˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์‹œ, ์—๋Ÿฌ๋ฅผ ์ฒดํฌํ•˜๋Š” ๋Œ€์‹  ๊ทธ ์ „์— ์‚ฌ๋žŒ์ด ์ง์ ‘ ์˜ค๋ฅ˜๋ฅผ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— JS์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค. 3. ์•ˆ์ „ํ•˜๋ฉฐ, ํ˜‘์—…์— ์šฉ์ดํ•˜๋‹ค. ํƒ€์ธ์˜ ์ฝ”๋“œ๋ฅผ ์ฝ์—ˆ์„ ๋•Œ์— ํ•œ ๋ˆˆ์— ์–ด๋–ค ํƒ€์ž…์ธ..

[vuejs] vue-router ์ค‘์ฒฉ ๋ผ์šฐํŒ…

// App.vue : ์ตœ์ƒ์œ„ outlet ์ด ๊ณณ์— ๋ Œ๋”๋ง๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ตœ์ƒ์œ„ outlet์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ๋ Œ๋”๋ง๋œ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ค‘์ฒฉ๋œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค. // About.vue About App.vue๋ผ๋Š” ๊ฐ€์žฅ ๋ฐ”๊นฅ์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— About.vue๊ฐ€ ๋ Œ๋”๋ง๋˜๊ณ  About.vue ์•ˆ์—์„œ ๋˜ Info1.vue, Info2.vue๊ฐ€ ๋ Œ๋”๋ง๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. children์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์ฒฉ ๋ผ์šฐํŒ…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. import Main from "@/views/Main.vue"; import DiarydWrite from "@/views/DiaryWrite.vue"; import Info1 from "@/views/Info1.vue"; import Info2 from "@/views/..

[vuejs] vue-router ๋™์  ๋ผ์šฐํŒ…

โ–  ๋™์  ๋ผ์šฐํŒ… URL์ด ํ•„์š”์— ๋”ฐ๋ผ ๋ฐ”๋€Œ์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝœ๋ก (:)์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์ด id ์ธ ๊ฒƒ์€ ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋‚˜, ์ปจ๋ฒค์…˜์ด๋ผ๊ณ  ํ•จ const routes = [ { path: '/user/:id', component: UserAuth, }, { path: '/main', component: Main, }, ] export default routes ๋ฌผ๋ก  ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋™์  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. { path: '/user/:id/auth/:pageNm', component: UserAuth, }, {{ item.user }} ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ณ€๊ฒฝ ์‹œ์ ์„ ์žก๊ณ  ์‹ถ๋‹ค๋ฉด? ๋ฐฉ๋ฒ• 1. watch๋กœ $route ๊ฐ์ฒด๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด ๋œ๋‹ค. watch..

๋ฐ˜์‘ํ˜•