๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/Vue.js

[Vue.js] URL ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

by Connecting-the-dots 2022. 4. 5.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์Šต ํฌ์ธํŠธ!

  • ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋ฐ์ดํ„ฐ ์ˆœ์„œ์— ๋งž๋Š” ์ƒ์„ธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

๐Ÿ’œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ•์˜ ํ•„์š”์„ฑ ์•Œ์•„๋ณด๊ธฐ

  • ์ƒ์„ธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด URL ์„ ์–ด๋–ค ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์ข‹์„์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•˜๋‹ค.
  • ๋ณดํ†ต ๋ธ”๋กœ๊ทธ๋‚˜ ์‡ผํ•‘๋ชฐ๊ฐ™์€ ์‚ฌ์ดํŠธ๋ฅผ ๋“ค์–ด๊ฐ€๋ฉด ์ƒ์„ธ ํŽ˜์ด์ง€๋Š” ๋ณดํ†ต /seoyun/0, /seoyun/1, /seoyun/2 ... ์ด๋Ÿฐ์‹์œผ๋กœ ๋””์ž์ธ๋˜์–ด์žˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์ด 0 ์œผ๋กœ ๋๋‚˜๋ฉด 0 ์— ํ•ด๋‹นํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ, 1 ๋กœ ๋๋‚˜๋ฉด 1์— ํ•ด๋‹นํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์‹์ธ ๊ฒƒ์ด๋‹ค.
const routes = [
  {
    path: '/detail/0',
    component: Detail,
  },
  {
    path: '/detail/1',
    component: Detail,
  },
  {
    path: '/detail/2',
    component: Detail,
  }, 
];
  • ๊ทธ๋ ‡๋‹ค๊ณ  ์œ„์™€ ๊ฐ™์ด router.js ํŒŒ์ผ์„ ์ž‘์„ฑํ•  ์ˆ˜๋Š” ์—†๋‹ค.
  • ์™œ๋ƒํ•˜๋ฉด, ํ•„์š”ํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฏ€๋กœ ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๊ทธ๋ž˜์„œ, ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.

 

๐Ÿค ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ• ์•Œ์•„๋ณด๊ธฐ

const routes = [
  {
    path: '/detail/:id',
    component: Detail,
  },
];
  • ์œ„์™€ ๊ฐ™์ด path ๋ถ€๋ถ„์˜ /detail/ ๋’ค์— ๋ถ™์—ฌ์ง„ :id ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค.
  • ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ณดํ†ต ์ฝœ๋ก ( : )์„ ๋ถ™์—ฌ ์ด๋ฆ„์ง“๊ฒŒ ๋œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ์ด์ œ ์ฃผ์†Œ์ฐฝ์— /detail/ ๋’ค์— ์–ด๋–ค ๊ฒƒ์„ ์ž‘์„ฑํ•ด๋„ Detail.vue ํŒŒ์ผ์„ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค.
  • ๋‹ค๋งŒ, ๋ฌธ์ œ๋Š” /detail/0, /detail/1 ... ๊ณผ ๊ฐ™์ด ์ ์–ด๋„ ๊ฐ ๋ฒˆํ˜ธ์— ๋งž๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋˜‘๊ฐ™์€ ๋‚ด์šฉ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

  • ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด, ๋ณด์—ฌ์ค„ ํŒŒ์ผ์—์„œ $route ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ๊ฐ์ด ์žกํžŒ๋‹ค. 
  • /detail/1 ์— ์ ‘์†ํ•˜์—ฌ $route ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋‹ˆ ์œ„์™€ ๊ฐ™์ด "params" ์— id ๊ฐ€ 1๋กœ ์ž˜ ๋“ค์–ด์™€์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, $route.params.id ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ฐ ๋ฒˆํ˜ธ์— ๋งž๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

๐Ÿค ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ• ์‚ฌ์šฉํ•˜๊ธฐ

<template>
  <div class="container mt-4">
    <h4>์ƒ์„ธ ํŽ˜์ด์ง€</h4>
    <h5>{{posts[$route.params.id].title}}</h5>
    <p>{{posts[$route.params.id].content}}</p>
    <p>{{posts[$route.params.id].date}}</p>
  </div>
</template>
  • ๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์ด Detail.vue ํŒŒ์ผ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•