Programming Project ์ž‘์—…์‹ค/๋‚ด์šฉ ์ •๋ฆฌ

[FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - Home / Main

์ฃผ๋‹ˆ์“ฐ๐Ÿง‘‍๐Ÿ’ป 2022. 3. 14. 00:10
728x90
๋ฐ˜์‘ํ˜•

 

 

๐Ÿง‘๐Ÿป‍๐Ÿ’ป Git Hub ์ฃผ์†Œ

 

 

 

๐Ÿ—‚ ๋ชฉ์ฐจ

โ— [FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - Home / Main

โ— [FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ : ๋ชฉ๋ก ์กฐํšŒ

โ— [FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ : ์ƒ์„ธ ์กฐํšŒ

โ— [FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ : ๋“ฑ๋ก / ์ˆ˜์ •

โ— [FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ : ์‚ญ์ œ

โ— [FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ : ๋‹ต๋ณ€ ๋“ฑ๋ก / ์ˆ˜์ •

โ— [FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ : ๋‹ต๋ณ€ ์‚ญ์ œ

 

๐Ÿ‘จ‍๐Ÿ‘ฉ‍๐Ÿ‘ง‍๐Ÿ‘ฆ ํšŒ์› ๊ด€๋ จ

โ— [FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - ํšŒ์› ๊ด€๋ จ : ํšŒ์› ๊ฐ€์ž…



 

- ๋ถ€ ๋ก -

[Vue.js] axios ์„ค์น˜

[FrontEnd] html Tag ์ •๋ฆฌ

[CSS] CSS ์ •๋ฆฌ

[FrontEnd][Vue-PJ] ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค - Paging ์ฒ˜๋ฆฌ

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Vue Router

 

 

 

 

 

 

 

 

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘ ์ž…๋‹ˆ๋‹ค!
์ฃผ๋‹ˆํ•˜๋ž‘์€ Back End ( Java - Spring ๊ธฐ๋ฐ˜ )์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ–ˆ๊ณ , FrontEnd๋„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•œ ๊ฒƒ์ด์—์š”.
๊ทธ ์ด์œ ๋Š” ๋‚ด๊ฐ€ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ์„œ๋น„์Šค๋ฅผ ๋‚˜ ํ˜ผ์ž์„œ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ณ , ๋ฌด์—‡๋ณด๋‹ค ์ทจ์—…์„ ํ–ˆ์„ ๋•Œ Front End ๊ฐœ๋ฐœ์ž์™€ ์˜์‚ฌ์†Œํ†ต์ด ๋ณด๋‹ค ํŽธํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์˜ˆ์ „์— ์ฒ˜์Œ Spring Boot๋ฅผ ์ ‘ํ•˜๋ฉด์„œ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ–ˆ์„ ๋•Œ, React ๊ธฐ๋ฐ˜ Front End ๊ฐœ๋ฐœ ๊ณต๋ถ€ํ•˜๋Š” ๋ถ„๋“ค๊ณผ ์˜์‚ฌ ์†Œํ†ต์„ ํ•  ๋•Œ, ๋งŽ์ด ํž˜๋“ค์—ˆ๋˜๊ฒƒ์ด์—์š”. ๋„ํ†ต ๋ฌด์Šจ ์†Œ๋ฆฌ๋ฅผ ํ•˜๋Š”์ง€ ... ๐Ÿค”

์ฒ˜์Œ ๊ณต๋ถ€์ด๋‹ˆ ๋งŒํผ ์ด ํ”„๋กœ์ ํŠธ๋Š” ํด๋ก  ์ฝ”๋”ฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํ”„๋กœ์ ํŠธ ์ž…๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์™„๋ฒฝํ•˜๊ฒŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๊ณ , ์ฃผ๋‹ˆํ•˜๋ž‘์˜ ์ž…๋ง›์— ๋งž์ถฐ์„œ ์ˆ˜์ •ํ•  ๊ฒƒ์€ ์ˆ˜์ •ํ•˜๊ณ , ๋”ฐ๋ผํ•  ๊ฒƒ์€ ๋”ฐ๋ผ ํ•ด ๋ณด๋ฉด์„œ Error๋„ ๊ฒฝํ—˜ํ•˜๊ณ , Vue์˜ ์„ธ๊ณ„๋ฅผ ํƒํ—˜ ํ•ด ๋ณด๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์•„๋ฌด๋ž˜๋„ Java ๊ธฐ๋ฐ˜ Back End ๊ฐœ๋ฐœ์ด๋‹ค ๋ณด๋‹ˆ ์„ค๋ช…ํ•˜๋Š” ๋ถ€๋ถ„์ด Java์™€ ๋น—๋Œ€์–ด ์„ค๋ช…ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์  ์ฐธ๊ณ  ๋ฐ”๋ผ๋Š” ์ ์ด์—์š”!

์ฃผ๋‹ˆํ•˜๋ž‘๊ณผ ๊ฐ™์ด Java ๊ธฐ๋ฐ˜ Back End ๊ฐœ๋ฐœ์ž์ธ๋ฐ, Vue๋ฅผ ์ฒ˜์Œ ์ ‘ํ•ด๋ณด๊ณ  ์‹ถ์€ ๋ถ„๋“ค๊ป˜๋Š” ์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊ธ€์ด ๊ฝค ๋„์›€์ด ๋˜์‹œ๋ฆฌ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

์ด ๊ณณ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ์„ค์น˜ ๋“ฑ์€ ์ž‘์„ฑํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด์—์š”.
์ด์œ ๋Š” ์ฃผ๋‹ˆํ•˜๋ž‘๋„ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค ๋ณด๋‹ˆ ์ผ๋‹จ ๋˜๋Š”์ง€๋ฅผ ๋จผ์ € ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ง€๋‚˜๊ฐ„ ๊ฒƒ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์ด์—์š”๐Ÿฅฒ

๋Œ€์‹  Vue๋ฅผ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ '์ด ๊ณณ'์— ์ค€๋น„ ํ•ด ๋‘์—ˆ์–ด์š”!

๊ฐ™์ด ์„ฑ์žฅ ํ•ฉ์‹œ๋‹ค!

 

 

 

 

๐Ÿš€ Home (Main) Page ๋งŒ๋“ค๊ธฐ

Home.vue

 

 

 

Home.vue

 

๋จผ์ € ๊ฒฐ๊ณผ๋ถ€ํ„ฐ ๋ณด์ž๋ฉด ์œ„์™€ ๊ฐ™์ด Main Page๋ฅผ ๋งŒ๋“ ๊ฒƒ์ด์—์š”. ์•„์ง ์„œ๋น„์Šค๋“ค์ด ์™„์„ฑ์ด ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜ํ•˜๋‚˜ ๋ถ™ํžˆ๊ธฐ ์œ„ํ•ด ๋‹ค ์™„์„ฑํ•˜์ง€๋Š” ์•Š์€ ๊ฒƒ์ด์—์š”.

 

 

    ๐Ÿ”ฝ  App.vue

 

ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ Vue devtool

 

์—ฌ๊ธฐ๊ฐ€ ๋ฐ”๋กœ ์‹ค์ œ๋กœ Client์˜ Web Browser์— ์‹ค์ œ๋กœ ํ™”๋ฉด์ด ์ถœ๋ ฅ๋˜๋Š” ๊ณณ ์ด๋ž๋‹ˆ๋‹ค.

 

 

    ๐Ÿ“ฆ <template> Tag ๋‚ด์šฉ

๋จผ์ € <tmplate> Tag์— ์‹ค์ œ๋กœ ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ ๋‚ด์šฉ์„ ๋„ฃ์–ด ์ค€ ๊ฒƒ์ด์—์š”.

์ฃผ๋‹ˆํ•˜๋ž‘์ด ๋งŒ๋“  ์›น์„œ๋น„์Šค๋Š” Header์™€ Footer๋Š” ๊ณตํ†ต ์‚ฌํ•ญ์ด๊ณ , ๋ณ€ํ™”๋ฅผ ์ฃผ์ง€ ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— <TheHeaders />์™€ <TheFooters /> Tag ๋‘ ๊ฐœ๋ฅผ Contents๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ณณ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ ์œ„ ์•„๋ž˜๋กœ ๋‚˜๋ˆ  ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”.

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ด Header์™€ Footer๋Š” ํ™”๋ฉด์ด ๋ณ€ํ™”ํ•  ๋•Œ๋„ Re rendering์ด ๋˜์ง€ ์•Š๋Š”๋‹ต๋‹ˆ๋‹ค! 

๊ทธ๋ฆฌ๊ณ , 8๋ฒˆ์งธ ์ค„์„ ๋ณด๋ฉด <router-view> ๋ผ๋Š” Tag๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด์—์š”. ์ด ๋‚ด์šฉ์€ '์ด ๊ณณ'์— ์ •๋ฆฌ๋ฅผ ํ•ด์„œ ์ค€๋น„ ํ•ด ๋‘˜๊ฒŒ์š”!

์ฃผ๋‹ˆํ•˜๋ž‘์€ :key ์†์„ฑ์œผ๋กœ $foute.fullpath๋ผ๋Š” ๊ฒƒ์„ ์ž…๋ ฅ ํ•ด ๋‘” ๊ฒƒ์ด์—์š”. ๋ฐ”๋กœ router-view์˜ Tag ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ธ๋ฐ,
์ด๊ฒƒ์€ ์•„๋ž˜ ๋‚ด์šฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๊ฒƒ์ด์—์š”.

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌํ™œ์šฉ๋˜๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’๋งŒ ๋ณ€๊ฒฝ๋˜๋Š” ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

parents/1
parents/2

 

parents๋ผ๋Š” ๋‚ด์šฉ์€ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด์„œ /:id ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ์ƒํ™ฉ์ธ ๊ฒƒ์ด์—์š”.
๋Œ€๋ถ€๋ถ„ ์ด๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ๊ฒŒ์‹œ๊ธ€ ๋“ฑ ์ƒ์„ธ ์กฐํšŒ ๋•Œ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ Backend๊ฐ€ ๊ตฌ์„ฑ์„ ํ•ด ๋†“๋Š” ๊ฒƒ์ด์—์š”.
์ด ์ƒํ™”์—์„œ Id ๊ฐ’์— ๋”ฐ๋ผ "create๋‚˜, onMount์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋งŒ๋“œ๋Š”" ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์™€ ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”. 

๋ฐ”๋กœ! ์ฃผ์†Œ์ฐฝ์—์„œ๋Š” parameter (id)๊ฐ’์ด ๋ณ€ํ•˜๋Š”๋ฐ, ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค!

ํ•ด๋‹น ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์›์ธ์€ ๋ฌด์—‡์ผ๊นŒ์š”?
๊ทธ ์ด์œ ๋Š” vue๋Š” ์ž์› ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋™์ผ ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋™ ์‹œ Refresh๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด์—์š”.
๋”ฐ๋ผ์„œ ์žˆ๋Š” ๊ธฐ์กด์— ์žˆ๋Š” ๊ฒƒ์„ ๋‹ค์‹œ ๋˜ ๋ณด์—ฌ์ฃผ๋‹ค ๋ณด๋‹ˆ create๋‚˜, mount๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์—์š”.

 

ํŽ˜์ด์ง€๋ฅผ ๋งŽ์ด ๋งŒ๋“ค๋‹ค๋ณด๋ฉด ๋งˆ์ถ”์ง€๋Š” ๋ฌธ์ œ์ 

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋Š” ํ•˜๋‚˜์˜ ์นดํ…Œ๊ณ ๋ฆฌ์— ์žˆ๋Š” ์ƒํ’ˆ๋“ฑ์„ ํด๋ฆญ ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ธ ๊ฒƒ์ด์—์š”.
์˜ˆ๋ฅผ ๋“ค์–ด ์ธํ„ฐ๋„ท ์‡ผํ•‘๋ชฐ์—์„œ ๋ฌผ๊ฑด์„ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํŠน์ • ์นดํ…Œ๊ณ ๋ฆฌ์— ๋“ค์–ด๊ฐ€์„œ ๋…ธ์ถœ๋œ ์ƒํ’ˆ์„ ๋ณด๋Š” ๊ฒƒ์ด์—์š”. ๊ทธ๋ฆฌ๊ณ , ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ด ๋•Œ, ์ฃผ์†Œ์ฐฝ์„ ๋ณด๋ฉด ์ฃผ์†Œ๊ฐ€ Path Variable ๋˜๋Š” Query String ๋“ฑ์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ๋ฐ”๋กœ API๋กœ ํ†ต์‹ ์„ ํ•ด์„œ ํด๋ฆญ์„ ํ•œ ์นœ๊ตฌ์˜ Param์œผ๋กœ ๋„ฃ์–ด ๋ณด๋‚ด๋Š” ๊ฒƒ์ธ๋ฐ, ์ด ๋•Œ๊นŒ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ์ด์ œ ๋ฌธ์ œ๊ฐ€ ์‹œ์ž‘ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

# Samsung Laptop ๊ตฌ๋งค ํŽ˜์ด์ง€
/samsung/laptop

# Samsung Mobile ๊ตฌ๋งค ํŽ˜์ด์ง€
/samsung/mobile

 

์šฐ๋ฆฌ๊ฐ€ ๋…ธํŠธ๋ถ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๊ณ , ๋ฐ”๋กœ ํ•ธ๋“œํฐ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, Page๊ฐ€ Load ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ด ๋•Œ ๋‹ค์‹œ samsung Page๋กœ ์ด๋™ํ•œ ๋’ค, mobile Page๋กœ ์ด๋™ํ•˜๋ฉด Page๋Š” ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด์—์š”.
๊ทธ ์ด์œ ๋Š” ๋ฐ”๋กœ router view์— Key๋ฅผ Bindding ํ•˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—์š”.

<router-view :key="$route.fullPath"/>

 

key๋ฅผ ํ†ตํ•ด ๊ฒฝ๋กœ ๊ฐœ์ฒด ์†์„ฑ์„ ๊ฐ•์ œ๋กœ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”. ๋ณด์—ฌ์ง€๋Š” ํ™”๋ฉด์— Query ๋ฐ Hash๊ฐ€ ํฌํ•จ๋œ ์ „์ฒด URL์„ ์—ฐ๊ฒฐํ•˜์—ฌ Query Sring์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋งˆ๋‹ค ์ฆ‰, ํƒ์ƒ‰ํ•˜๋Š” Event๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋งˆ๋‹ค Page๋ฅผ ๋‹ค์‹œ Loadํ•˜์—ฌ ๋…ธ์ถœ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ธ ๊ฒƒ์ด์—์š”.

์ด ๋ฐฉ๋ฒ• ์™ธ์— ์•„๋ž˜ ๋ฐฉ๋ฒ•๋„ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

<router-view :key="$route.path" />

 

์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘์— ์•„๋ž˜ ๋‚ด์šฉ์„ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. 

<router-view :key="$route.fullpath">

๊ทธ๊ฒƒ์€ ์ž์› ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์•ˆํƒ€๊นŒ์šด ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—์š”. ๊ณ„์†ํ•ด์„œ ์ƒˆ ํ™”๋ฉด์„ ์ถœ๋ ฅํ•จ์œผ๋กœ์จ, ์“ฐ๋ ˆ๊ธฐํ†ต์— ๋ฒ„๋ฆฌ๊ณ , ์ƒˆ๋กœ์šด ๊ฑฐ ๋‹ค์‹œ ์˜ฌ๋ฆฌ๊ณ , ๋ฒ„๋ฆฌ๊ณ ๋ฅผ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ž์› ๋‚ญ๋น„๋ฅผ ์ค„์ด๋ฉฐ, ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์— ๋”ฐ๋ผ ์žฌ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” watch๋กœ route params๋ฅผ ๊ฐ์‹œํ•˜์—ฌ ํ•ด๋‹น ๊ฐ’์ด ๋ณ€ํ™˜์— ๋”ฐ๋ผ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

 

์˜ˆ์‹œ ์ฝ”๋“œ

created() {
    this.$watch(
      () => this.$route.params,
      (toParams, previousParams) => {
        // react to route changes…
      }
    )
  },

 

 

 

route key๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ Log

 

hi๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์ธ๋ฐ, ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์— ๋”ฐ๋ผ ๊ณ„์† ์“ธ๋ฐ์—†์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

fullpath๋ฅผ ์‚ฌ์šฉ ์•ˆํ–ˆ์„ ๋•Œ Log

 

 

์œ„์˜ ๊ทธ๋ฆผ์€ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— hi๋ผ๋Š” ๋ฌธ์ž์—ด์€ ์ƒ์„ฑ๋  ์ดˆ๊ธฐ ๋‹น์‹œ์—๋งŒ ํ‘œ๊ธฐ ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

    ๐Ÿ“ฆ <script> ๋‚ด์šฉ

์ด ๊ณณ์—์„œ๋Š” <template>์—์„œ ์ž‘์„ฑ๋œ DOM์„ ์‹ค์งˆ์ ์œผ๋กœ Handling ํ•˜๊ธฐ ์œ„ํ•ด javascript ๋“ฑ์„ ์ด์šฉํ•ด์„œ Coding์„ ํ•˜๋Š” ๋ถ€๋ถ„์ธ ๊ฒƒ์ด์—์š”.

๋จผ์ € ์ฃผ๋‹ˆํ•˜๋ž‘์€ Hader์™€ Footer component๋ฅผ Importํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด Import๋ฌธ์„ ์ž‘์„ฑํ•œ ๊ฒƒ์ด์—์š”.

import TheHeaders from "@/views/include/myHead.vue";
import TheFooters from "@/views/include/myFooter.vue";

 

๊ทธ๋Ÿฐ ๋‹ค์Œ 20 ~ 23๋ฒˆ์งธ ์ค„์— export default - componets์— import ์•ž์— ์ž‘์„ฑํ•œ Component ์ด๋ฆ„์„ ๋“ฑ๋ก ํ•ด ์ค€ ๊ฒƒ์ด์—์š”.

data()๋Š” ์–ด๋–ค ๋ณ€์ˆ˜๋‚˜ ๋ฐฐ์—ด ๋“ฑ์„ ์„ ์–ธํ•˜๋Š” ๊ณณ์ธ๋ฐ, ์ž๋ฐ”๋กœ ์น˜๋ฉด ์ƒ์„ฑ์ž์•ˆ์— ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋Š” ๊ณณ์ด๋ผ๊ณ  ์ฃผ๋‹ˆํ•˜๋ž‘์€ ์ดํ•ดํ•œ ๊ฒƒ์ด์—์š”.

์ด๊ณณ 26 ~ 28 ๋ฒˆ์งธ ์ค„์— ํŠน๋ณ„ํžˆ ๋ณ€์ˆ˜ ๋“ฑ์ด ํ•„์š”์—†์–ด ๊ทธ๋ƒฅ ์„ ์–ธ๋งŒ ํ•ด ๋†“์€ ๊ฒƒ์ด๊ณ , 30๋ฒˆ์งธ ์ค„์—๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ณณ์ธ๋ฐ, ์—ญ์‹œ ํŠน๋ณ„ํžˆ ํ•จ์ˆ˜๊ฐ€ ํ•„์š” ์—†์–ด ์„ ์–ธ๋งŒ ํ•ด ๋†“์€ ๊ฒƒ์ด์—์š”.

 

 

    ๐Ÿ“ฆ <style> Tag ๋‚ด์šฉ

์ด ๊ณณ์€ CSS๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ธ ๊ฒƒ์ด์—์š”.
์ฃผ๋‹ˆํ•˜๋ž‘์€ ๊ณตํ†ต์ ์œผ๋กœ CSS๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— style์ด๋ผ๋Š” css ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ๊ทธ๊ฒƒ์„ url()์„ ์ด์šฉํ•ด์„œ importํ•œ ๊ฒƒ์ด์—์š”.

 

 

 

 

    ๐Ÿ”ฝ  myHome.vue

์ผ๋‹จ ์ด component์˜ ์ด๋ฆ„์„ ์ด๋ ‡๊ฒŒ ์ง€์€ ์ด์œ ๋Š” eslint Error ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด์—์š”.
์ด๊ฒŒ Home์œผ๋กœ ์ด๋ฆ„์„ ์ง€์œผ๋ฉด multi-word๋ผ๊ณ  Error๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์•„์ฃผ ๋ฏธ์น˜๊ฒ ๋Š” ๊ฒƒ์ด์—์š”.
์‹ค๋ฌด์ž ๋ถ„๊ป˜์„œ ์กฐ์–ธ ํ•ด ์ฃผ์‹œ๊ธธ ์ด๊ฑธ Disable ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด ๋‚ด์šฉ์„ ๋”ฐ๋ผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•˜์—ฌ ์•„์˜ˆ ๊ทธ๋ƒฅ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ด์—์š”. ํ•ด๋‹น Error ๊ด€๋ จ ๋‚ด์šฉ์€ '์ด ๊ณณ'์— ์ž˜ ์ •๋ฆฌํ•ด์„œ ์ค€๋น„ ํ•ด ๋‘˜๊ฒŒ์š”!

 

 

 

    ๐Ÿ“ฆ <template> Tag ๋‚ด์šฉ

๋ณธ๊ฒฉ์ ์œผ๋กœ Component๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ด์—์š”.

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋œ HTML Tag์™€ CSS๋Š” ๊ฐ๊ฐ ๋”ฐ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด ๋‘˜ ๊ฒƒ์ด์—์š”.

์œ„์— ํ™ˆํŽ˜์ด์ง€ ๊ทธ๋ฆผ์„ ๋ณด์…จ๋“ฏ์ด ๋ฉ”์ธ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๋‹จ์—๋Š” Navigation์„ ๋งŒ๋“ค๊ณ , Header์™€ Contents ๋ถ€๋ฅผ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด

 

์ด๋ ‡๊ฒŒ ๊ตฌ๋ถ„์„ ํ•ด ์ค€ ๊ฒƒ์ด์—์š”.

๊ทธ๋ฆฌ๊ณ , ์ปจํ…์ธ  ๋ถ€์—๋Š” ๊ฒŒ์‹œํŒ์„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์—…์„ ํ•  ๊ฒƒ์ด๊ณ , 61~64๋ฒˆ์งธ ์ค„ ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด๋‹ˆ๋งŒํผ ์ฃผ๋‹ˆํ•˜๋ž‘์ด ์ž์ฃผ ์• ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ ๊ด€๋ จ ์‚ฌ์ดํŠธ๋ฅผ ์ˆœ์„œ ์—†๋Š” ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด <ul> <li> tag๋ฅผ ํ†ตํ•ด Logo๋ฅผ ๋„ฃ์–ด์ค€ ๊ฒƒ์ด์—์š”. a Tag๋Š” ํ•˜์ดํผ๋งํฌ๋ฅผ ์ง€์›ํ•˜๋Š” ํƒœ๊ทธ์ด๋ฉฐ, href ์†์„ฑ์— URL์„ ๋„ฃ์œผ๋ฉด ํ•ด๋‹น ๊ฐ’์„ ํด๋ฆญํ–ˆ์„ ๋•Œ, ํ•ด๋‹น ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ๋งŒ์•ฝ href ์†์„ฑ์— `#`์„ ๋„ฃ์–ด๋†“๋Š”๋‹ค๋ฉด ๋ชจ์–‘๋งŒ ์žˆ์„ ๋ฟ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ต๋‹ˆ๋‹ค.

img Tag์˜ src๋Š” ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ณณ์ธ๊ฒƒ์ด์—์š”. ๊ทผ๋ฐ ์™œ? require๋ฅผ ๋” ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ์„๊นŒ์š”? ๊ทธ ์ด์œ ๋Š” require๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด src์— ์ž…๋ ฅ๋œ img Path๋Š” ๋‹จ์ˆœ ๋ฌธ์ž์—ด๋กœ ์ธ์‹์ด ๋˜๋Š” ๊ฒƒ์ด์—์š”. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์œ„์น˜ ๊ฐ’์œผ๋กœ ์ธ์‹ ์‹œ์ผœ์ฃผ๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ์„ ํ•ด ์ฃผ์—ˆ๋‹ต๋‹ˆ๋‹ค. 

alt์†์„ฑ์€ ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์„ ๋•Œ, ๋Œ€์‹  ๋ณด์—ฌ์ค„ ๋ฌธ์ž์—ด์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด์—์š”. 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•