Vue的学习笔记-Day4-03(路由的传参、嵌套和命名视图布局)

一、路由的传参

1、传参的第一种方式

<div id="app">
    <!--如果在路由中,使用查询字符串,给路由传递参数,则不需要修改路由规则的path属性-->
    <router-link to="/login?id=10&name=zs">登录</router-link>
    <router-link to="/register">注册</router-link>

    <router-view></router-view>
</div>

<script>

    var login = {
        template: '<h1>登录 --- {{$route.query.id}} --- {{$route.query.name}}</h1>',
        created() { //组件的生命周期钩子函数
            console.log(this.$route);
        }
    };

    var register = {
        template: '<h1>注册</h1>'
    };

    var router = new VueRouter({
        routes: [
            {path: '/', redirect: {path: '/login', query: {id: 10, name: "zs"}}},
            {path: '/login', component: login},
            {path: '/register', component: register},
        ]
    });

    var vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router: router
    })
</script>

2、传参的第二种方式

<div id="app">
    <!--如果在路由中,使用查询字符串,给路由传递参数,则不需要修改路由规则的path属性-->
    <router-link to="/login/10">登录</router-link>
    <router-link to="/register">注册</router-link>

    <router-view></router-view>
</div>

<script>

    var login = {
        template: '<h1>登录</h1>',
        created() { //组件的生命周期钩子函数
            console.log(this.$route.params);
        }
    };

    var register = {
        template: '<h1>注册</h1>'
    };

    var router = new VueRouter({
        routes: [
            {path: '/', redirect: '/login/:id'},
            {path: '/login/:id', component: login},
            {path: '/register', component: register},
        ]
    });

    var vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router: router
    })
</script>

二、路由的嵌套

<div id="app">
    <router-link to="/account">Account</router-link>

    <router-view></router-view>
</div>

<template id="tmpl">
    <div>
        <h1>这是Account组件</h1>

        <router-link to="/account/login">登录</router-link>
        <router-link to="/account/register">注册</router-link>
    </div>
</template>

<script>
    //组件的模板对象
    var account = {
        template: '#tmpl'
    };

    var login = {
        template: '<h3>登录</h3>'
    };

    var register = {
        template: '<h3>注册</h3>'
    };

    var router = new VueRouter({
        routes: [
            {
                path: '/account',
                component: account,
                children: [
                    {
                        //使用children属性,实现子路由,path不需要加/
                        path: 'login',
                        component: login
                    },
                    {
                        path: 'register',
                        component: register
                    }
                ]
            },
        ]
    });

    var vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router,
    })
</script>

三、路由-命名视图实现经典布局

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="lib/vue-2.6.10.js"></script>
    <script src="lib/vue-router.js"></script>
    <style>
        html, body {
            margin: 0;
            padding: 0;
        }

        .header {
            background-color: orange;
            height: 80px;
        }

        .container {
            display: flex;
            height: 600px;
        }

        .left {
            background-color: lightgreen;
            flex: 2;
        }

        .main {
            background-color: lightpink;
            flex: 10;
        }

        h1 {
            margin: 0;
            padding: 0;
            font-size: 16px;
        }
    </style>
</head>
<body>

<div id="app">
    <router-view></router-view>
    <div class="container">
        <router-view name="left"></router-view>
        <router-view name="main"></router-view>
    </div>
</div>

<script>

    var header = {
        template: '<h1 class="header">Header头部区域</h1>'
    };

    var leftBox = {
        template: '<h1 class="left">Left侧边栏区域</h1>'
    };

    var mainBox = {
        template: '<h1 class="main">mainBox主体区域</h1>'
    };

    //创建路由对象
    var router = new VueRouter({
        routes: [
            {
                path: '/',
                components: {
                    'default': header,
                    'left': leftBox,
                    'main': mainBox,
                }
            }
        ]
    });

    var vm = new Vue({
        el: '#app',
        data: {},
        methods: {},
        router
    })
</script>

</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 那这次呢?我决定直接就先放一个小小demo上来 其实我们在引入vue-router插件那一刻,我们的网页就已经附带...
    看物看雾阅读 859评论 0 1
  • 五、因特网的路由选择协议 1.有关路由选择协议的几个基本概念 Ⅰ、理想的路由算法 路由表中的路由是怎样得出的呢?核...
    dmmy大印阅读 2,075评论 0 4
  • Vue Router 官网已经写得很好了,这里自己再总结巩固下。(注意:这里所有的例子都是基于Vue/cli 3....
    李牧敲代码阅读 878评论 1 1
  • 七真宝诰 志心皈命礼 道先一炁,世显七真。悟五行不到之言,得九转还丹之诀。甘泉润物,变朽回春。金...
    龙门崇坤阅读 2,376评论 0 5
  • 新年第一天直接跨到了第二天。睡前照例象皇上浏览奏章一般看了一眼微信朋友圈与各好友,还真发现了一些苗头。 重新加了一...
    3be868950df2阅读 381评论 0 1