๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Nuxt.js ๊ณต์‹ ๋ฌธ์„œ Concept - View ํŒŒํŠธ ์ •๋ฆฌ

ยท ์•ฝ 4๋ถ„

Nuxt.js์˜ View๋Š” app template๊ณผ Layout, Page๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. SEO ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ดํŽ˜์ด์ง€ ๋ณ„๋กœ meta ํƒœ๊ทธ์™€ head ์„น์…˜์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Composition of a View in Nuxt.js

Pages#

๋ชจ๋“  ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ทฐ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ํ•˜์ง€๋งŒ Nuxt.js๋Š” ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋กํŠน๋ณ„ํ•œ ์†์„ฑ๋“ค๊ณผ ํ•จ์ˆ˜๋“ค์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

๋ชจ๋“  ํŽ˜์ด์ง€ ์†์„ฑ์„ ๋ณด๋ ค๋ฉด Directory Structure๋ฅผ์ฐธ๊ณ 

Layouts#

๋ ˆ์ด์•„์›ƒ์€ Nuxt.js ์•ฑ์˜ Look & Feel์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์ด๋“œ๋ฐ”)

๋ ˆ์ด์•„์›ƒ์€ layouts ๋””๋ ‰ํ† ๋ฆฌ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

default.vue ํŒŒ์ผ์€ ๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ํ•œ๋‹ค.

layouts/default.vue
<template>    <Nuxt /></template>

๋ ˆ์ด์•„์›ƒ์—๋Š” <Nuxt /> ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ ์™ธ์˜ ์ปค์Šคํ…€ ๋ ˆ์ด์•„์›ƒ์€ layouts ํด๋”์— ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

layouts/blog.vue
<template>    <div>        <div>My blog navigation bar here</div>        <Nuxt />    </div></template>

์ด๋ ‡๊ฒŒ ์ƒ์„ฑํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, page ์ปดํฌ๋„ŒํŠธ์—์„œ layout ์†์„ฑ์— ํŒŒ์ผ ์ด๋ฆ„์„ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

pages/posts.vue
<template>    <!-- Your template --></template><script>    export default {        layout: 'blog',        // page component definitions    };</script>

Error Page#

์—๋Ÿฌ ํŽ˜์ด์ง€๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ(404, 500, ๋“ฑ๋“ฑ) ํ‘œ์‹œ๋˜๋Š” ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.

์—๋Ÿฌ ํŽ˜์ด์ง€๋Š” ๋ ˆ์ด์•„์›ƒ์ด์ง€๋งŒ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ‘œ์‹œ๋˜๋Š” ํŠน๋ณ„ํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ์™€ ๋‹ฌ๋ฆฌ <Nuxt /> ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•ด์„  ์•ˆ๋˜๊ณ  , layouts ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค๋ฅธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ์„์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

layouts/error.vue
<template>    <div>        <h1 v-if="error.statusCode === 404">Page not found</h1>        <h1 v-else>An error occurred</h1>        <NuxtLink to="/">Home page</NuxtLink>    </div></template>
<script>    export default {        props: ['error'],        layout: 'error', // you can set a custom layout for the error page    };</script>

Document: App.html#

App ํ…œํ”Œ๋ฆฟ์€ head์™€ body์— ๋Œ€ํ•œ ์ปจํ…์ธ ์™€ ๋ณ€์ˆ˜๋ฅผ ์ฃผ์ž…ํ•˜๋Š” Nuxt.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜์‹ค์ œ HTML ํ”„๋ ˆ์ž„์„ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

์ด ํŒŒ์ผ์€ ์ž๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.

ํ•œ ๊ฐ€์ง€ ์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” IE์— ๋Œ€ํ•œ ์กฐ๊ฑด๋ถ€ CSS ๋Œ€์‘์ด๋‹ค.

app.html
<!DOCTYPE html><!--[if IE 9]><html class="lt-ie9 ie9" {{ HTML_ATTRS }}><![endif]--><!--[if (gt IE 9)|!(IE)]><!--><html {{ HTML_ATTRS }}><!--<![endif]-->    <head {{ HEAD_ATTRS }}>        {{ HEAD }}    </head>    <body {{ BODY_ATTRS }}>        {{ APP }}    </body></html>

์ฐธ๊ณ ์ž๋ฃŒ#

Nuxt.js - Concept/Views