Nested Routes, Named Routes (중첩, 이름 라우터)

이전에 Router는 한 화면에 Component 1개만 표시했습니다.
더 복잡한 앱을 위해서는 화면에 여러개의 Component도 필요합니다.
이때 사용하는것이 Nested Router와 Named Router입니다.

Nested Router

<html>
    <head>
        <title>중첩 Router</title>
    </head>
    <body>
        <div id="app">
            <router-view></router-view>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.15/dist/vue.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.1/vue-router.min.js"></script>
        <script>
            /* User 컴포넌트 정의 */
            var User = {
                template :`
                    <div>
                        User Component
                        <router-view></router-view>
                    </div>
                `
            }
            /* 라우터 컴포넌트 정의 */
            var UserProfile = { template : '<p>User Profile Component</p>'};
            var UserPost = { template : '<p>User Post Component</p>'};
            /* 라우터 정의 */
            var routes = [
                pate : '/user',
                component : User,
                children : [
                    {
                        path : 'posts',
                        component : UserPost

                    },
                    {
                        path : 'profile',
                        component : UserProfile
                    }
                ]
            ]
            /* 라우터 선언 */
            var router = new VueRouter({
                routes
            });
            /* 뷰 인스턴스 생성 */
            var app = new Vue({
                router
            }).$mount('#app');
        </script>
    </body>
</html>

최상위 Component에 Router가 뿌려질 영역을 만들었습니다.
User라는 Component가 뿌려지는데 User Component는 router-view를 가지고 있습니다.
User Component는 자식 Component로 UserPost와 UserProfile이라는 Component를 가지고 있고,
URL에 따라 자신이 가지고 있는 router-view에 해당 자식 Component를 뿌려줍니다.
user/posts, user/profile 주소로 이동했을때 내용이 나타나는것을 확인할 수 있습니다.

Named Router

Router의 이름을 정한다는 의미에서 Named Router라는 이름을 가진 Router입니다.
일반 Router는 한 화면에 한개의 Component.
Nested Router는 Router 안의 다른 Component.
Named Router는 한 화면에 여러개의 Component.

<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>Named Vue Sample</title>
    </head>
    <body>
        <div id="app">
            <router-view name="header"></router-view>
            <router-view></router-view>
            <router-view name="footer"></router-view>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.15/dist/vue.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.1/vue-router.min.js"></script>
        <script>
            var Body = { template : '<div>This is Body</div>'};
            var Header = { template : '<div>This is Header</div>'};
            var Footer = { template : '<div>This is Footer</div>'};

            var router = new VueRouter({
                routes : [
                    {
                        path :'/',
                        components : {
                            default : Body,
                            header : Header,
                            footer : Footer
                        }
                    }
                ]
            });

            var app = new Vue({
                router
            }).$mount('#app');  
        </script>
    </body>
    </script>
</body>
</html>

위 예제처럼 router-view에 name 속성을 추가하여 이름을 부여함으로써 Router의 접근도 이름으로 가능해집니다.