๐Ÿ“• Language/Vue

[Age of Vue] Vue.js ์‹œ์ž‘ํ•˜๊ธฐ - 15.props ์‹ค์Šต

a n u e 2022. 5. 2. 22:50
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!--
            <app-header v-bind:ํ”„๋กญ์Šค ์†์„ฑ ์ด๋ฆ„="์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ์ดํ„ฐ ์ด๋ฆ„"></app-header>
        -->
        <app-header v-bind:propsdata="message"></app-header>
        <!-- ์ปดํฌ๋„ŒํŠธ์˜ props๋ช… ๋ฐ”์ธ๋”ฉํ•ด์ฃผ๊ณ , ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ ๊ฐ’์„ ์ ์–ด์ค€๋‹ค -->
        <app-content v-bind:propsdata="num"></app-content>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var appHeader = {
            template : '<h1>{{ propsdata }}</h1>' ,
            //์•„๋ž˜์—์„œ ๋ฐ›์„ props ์ด๋ฆ„ ์ง€์ •
            props : ['propsdata']
        }
        var appContent = {
            template : '<div>{{ propsdata }}</div>' ,
            //์•„๋ž˜์—์„œ ๋ฐ›์„ props ์ด๋ฆ„ ์ง€์ •
            //๋‹ค๋ฅธ ๋ช…์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ๋„ ๋˜๊ณ , ๊ฐ ๋ฒ”์œ„์—์„œ ์œ ๋‹ˆํฌํ•˜๊ฒŒ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—
            //๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์™€ props๋ช…์ด ๋™์ผํ•ด๋„ ๊ด€๊ณ„์—†๋‹ค.
            props : ['propsdata']
        }
        new Vue({
                el : '#app' ,
                components : {
                    'app-header' : appHeader,
                    'app-content' : appContent
                },
                data : {
                    message : 'hi',
                    num:10
                }
            })
    </script>
</body>
</html>

 

app-content ์ปดํฌ๋„ŒํŠธ์— Root ์ปดํฌ๋„ŒํŠธ์˜ num๊ฐ’์ด ๋ฐ”์ธ๋”ฉ๋˜์–ด ๋‚ด๋ ค์˜ด

 

Root ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง€์ •ํ•œ ์†์„ฑ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด (ex: num, message)

์ž๋™์œผ๋กœ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ’๋„ ๋ฐ”๋€๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ Vue์˜ Reactivity