IT/development

[Vue.js] ์ปดํฌ๋„ŒํŠธ(์žฌ์‚ฌ์šฉ ์œ ์šฉ)

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2023. 7. 26.

๋ชฉ์ฐจ

    ์ปดํฌ๋„ŒํŠธ ๋“ฑ๋ก

    ์ „์—ญ ์ปดํฌ๋„ŒํŠธ ๋“ฑ๋ก(ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ ์‹œ)

    Vue.component('app-header', {   
        template: '<header>header</header>'
    });

    ์ง€์—ญ ์ปดํฌ๋„ŒํŠธ ๋“ฑ๋ก(์ผ๋ฐ˜์ ์ธ ์ปดํฌ๋„ŒํŠธ)

    1.
    new Vue({
      el: '#app2',
              //์•„๋ž˜ components(s๋ถ™์—ฌ์•ผ ํ•จ) ์†์„ฑ ์ด์šฉ(๋ณต์ˆ˜ )
        components: {
            'app-footer': {
                template: '<footer>footer</footer>'
            }                
        }
    })
    
    2.
    //๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ๋‚ด์šฉ์„ object๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ „๋‹ฌ
    let appFooter = {
        template: '<footer>footer</footer>'
    }
    new Vue({
      el: '#app2',
        components: {
            'app-footer': appFooter 
        }
    })

    ์ง€์—ญ์ปดํฌ๋„ŒํŠธ๋Š” ์ธ์Šคํ„ด์ŠคํŠธ๋ฅผ ์ ์šฉํ•œ ์—˜๋ฆฌ๋จผํŠธ์•ˆ์—์„œ๋งŒ ์ ์šฉ๋จ

    <div id="app">  
        <app-header></app-header>      
        <app-footer></app-footer>
    </div>
    
    <!-- <app-header>(์ „์—ญ ์ปดํฌ๋„ŒํŠธ)๋Š” #app2์— ์ ์šฉ์ด ๋˜์ง€๋งŒ 
    <app-footer>(์ง€์—ญ ์ปดํฌ๋„ŒํŠธ)๋Š” ์ ์šฉ๋˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ ๋ฐœ์ƒ(Unknown custom element: <app-footer>...) -->
    <div id="app2">
    <app-header></app-header>      
    <app-footer></app-footer>
    </div>

    ์ปดํฌ๋„ŒํŠธ ์ ์šฉ

    <div id="app">  
        <!-- ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋“ฑ๋กํ•œ ์ปดํฌ๋„ŒํŠธ๋ช…์œผ๋กœ ํƒœ๊ทธ๋ฅผ ์„ค์ • -->		
    <app-header></app-header>      
    </div>

    ์ „์ฒด์ฝ”๋“œ

    <!DOCTYPE html>
    <html lang="ko">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue Componet</title>
    </head>
    <body>
    
    <!-- #app์€ root component -->    
    <div id="app">  
    <!-- ์•„๋ž˜์—์„œ ์ƒ์„ฑํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ์šฉ(ํ•˜์œ„/์ž์‹ ์ปดํฌ๋„ŒํŠธ) -->
    <app-header></app-header>      
    
    <!-- ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ํ‘œํ˜„์‹ -->
    <h2>{{ message }}</h2>
    
    <app-content></app-content>  
    <app-footer></app-footer>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
    //์ „์—ญ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ(1๋ฒˆ ์งธ ์ธ์ž: ์ปดํฌ๋„ŒํŠธ๋ช…, 2๋ฒˆ ์งธ ์ธ์ž: ๊ฐ์ฒด(์ปดํฌ๋„ŒํŠธ ๋‚ด์šฉ, template ์†์„ฑ ์ด์šฉ))
    Vue.component('app-header', {   
        template: '<header>header</header>'
    });
    Vue.component('app-content', {
        template: '<article>content</article>'
    });
    
    new Vue({
        el: '#app',
        //์ง€์—ญ ์ปดํฌ๋„ŒํŠธ ๋“ฑ๋ก
        components: {
            'app-footer': {
                template: '<footer>footer</footer>'
            }                
        },
        //๋ฐ์ดํ„ฐ ์„ธํŒ…
        data: {
            message: 'Hello Vue.js!!!!!!!'
        }                
    })
    
    </script>
    
    </body>
    </html>

    ๊ฒฐ๊ณผ

    Root ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ์ด๋ฃธ

    image source: https://v2.ko.vuejs.org/v2/guide/components.html

     

    ์ปดํฌ๋„ŒํŠธ — Vue.js

    Vue.js - ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ

    v2.ko.vuejs.org

    • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ๋Š” props ์†์„ฑ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
    • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋Š” event๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

    ํ†ต์‹  ๊ทœ์น™์ด ์žˆ์œผ๋ฉด ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ถ”์ ์ด ์šฉ์ดํ•จ

    reference: https://www.inflearn.com/course/age-of-vuejs/dashboard

     

    Vue.js ์‹œ์ž‘ํ•˜๊ธฐ - Age of Vue.js - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

    Vue.js๋กœ ์‰ฝ๊ฒŒ ์›น ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ•˜๊ณ  ๊ตฌํ˜„ํ•ด๋ด…๋‹ˆ๋‹ค. ๊ฐ•์ขŒ๋ฅผ ๋“ค์œผ์‹œ๊ณ  ๋‚˜๋ฉด Vue.js๋กœ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜์‹œ๋Š”๊ฒŒ ์žฌ๋ฐŒ์–ด์งˆ๊ฑฐ์—์š”., [์‚ฌ์ง„] Vue.js ์‹œ์ž‘ํ•˜๊ธฐ,Ag

    www.inflearn.com

    ๋Œ“๊ธ€