Vue Router初识

一、基本概念

 Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。包含的功能有:

  • 嵌套的路由/视图表
  • 模块化的、基于组件的路由配置
  • 路由参数、查询、通配符
  • 基于 Vue.js 过渡系统的视图过渡效果
  • 细粒度的导航控制
  • 带有自动激活的 CSS class 的链接
  • HTML5 历史模式或 hash 模式,在 IE9 中自动降级
  • 自定义的滚动条行为

二、模拟路由

  1.通过component标签 和window.onhashchange来实现模拟路由

   1.1、component Vue内置的标签,用途可以动态绑定我们的组件,根据数据不同更换不同的组件。

   1.2、 window.onhashchange 每次URL地址栏发生改变是会有一次事件监听(PS: 触发并不会刷新页面,而只是页面的滚动)

<body>
    <div id='app'>
        <a href="#/home">首页</a>
        <a href="#/love">我喜欢</a>
        <a href="#/history">播放历史</a>
        <a href="#/about">关于我们</a>
        <!-- Vue内置的标签,用途可以动态绑定我们的组件,根据数据不同更换不同的组件 -->
        <component :is="componentName"></component>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        const Home = {
             template: `
             <div>
                <p>首页内容11</p> 
                <p>首页内容22</p>
            </div>
            `};
        const Love = { 
            template: `
            <div>
            <p>沉默是金</p>
            <p>倩女幽魂</p> 
            <p>当爱已成往事</p>
            </div>
             ` };
        const History = { 
            template: `
            <div>
            <p>沉默是金</p> 
            <p>当爱已成往事</p>
            </div>
            ` };
        const About = {
             template: `
             <p>关于我们</p>
             `};
        const vm = new Vue({
            el: '#app',
            data() {
                return {
                    componentName: ''
                }
            },
            components: {
                //ES6 写法 相当于 'Home':Home
                Home,
                Love,
                History,
                About
            }
        })
        //通过window监听hash值的变化来切换显现的页面
        window.onhashchange = function () {
            console.log(location.hash);
            let hash = location.hash.slice(1)
            console.log(location.hash.slice(1));
            switch (hash) {
                case '/home':
                    vm.componentName = 'Home'
                    break;
                case '/love':
                    vm.componentName = 'Love'
                    break;
                case '/history':
                    vm.componentName = 'History'
                    break;
                case '/about':
                    vm.componentName = 'About'
                    break;
            }
        }
    </script>
</body>

效果图如下

三、Vue Router使用

 1、起步 安装

npm i vue-router

 2、基本使用  (PS: new VueRouter()  必须使用router变量接收否则会报错)

<body>
    <div id='app'>
        <router-link to="/home">首页</router-link>
        <router-link to="/love">我喜欢</router-link>
        <router-link to="/history">播放历史</router-link>
        <router-link to="/about">关于我们</router-link>
        <router-view></router-view>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script src="node_modules/vue-router/dist/vue-router.js"></script>
    <script>
        const Home = {
            template: `
             <div>
                <p>Vue-Router形式设置路由</p> 
                <p>首页内容22</p>
            </div>
            `};
        const Love = {
            template: `
            <div>
            <p>沉默是金</p>
            <p>倩女幽魂</p> 
            <p>当爱已成往事</p>
            </div>
             ` };
        const History = {
            template: `
            <div>
            <p>沉默是金</p> 
            <p>当爱已成往事</p>
            </div>
            ` };
        const About = {
            template: `
             <p>关于我们</p>
             `};

        const router = new VueRouter({
            routes: [{
                path: '/',
                redirect: '/home'
            }, {
                path: '/home',
                component: Home
            }, {
                path: '/love',
                component: Love
            }, {
                path: '/history',
                component: History
            }, {
                path: '/about',
                component: About
            }]
        })
        new Vue({
            el: '#app',
            router
        })
    </script>
</body>

效果图 

3、嵌套子类路由

<body>
    <div id='app'>
        <router-link to="/home">首页</router-link>
        <router-view></router-view>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script src="node_modules/vue-router/dist/vue-router.js"></script>
    <script>
        const Home = {
            template: `
             <div>
                <p>Vue-Router形式设置路由</p> 
                <router-link to="/home/love">我喜欢</router-link>
                <router-link to="/home/history">播放历史</router-link>
                <router-link to="/home/about">关于我们</router-link>
                <router-view></router-view>
            </div>
            `};
        const Love = {
            template: `
            <div>
            <p>沉默是金</p>
            <p>倩女幽魂</p> 
            <p>当爱已成往事</p>
            </div>
             ` };
        const History = {
            template: `
            <div>
            <p>沉默是金</p> 
            <p>当爱已成往事</p>
            </div>
            ` };
        const About = {
            template: `
             <p>关于我们</p>
             `};

        const router = new VueRouter({
            routes: [{
                path: '/',
                redirect: '/home'
            }, {
                path: '/home',
                component: Home,
                children: [{
                    path: '/home/love',
                    component: Love
                }, {
                    path: '/home/history',
                    component: History
                }, {
                    path: '/home/about',
                    component: About
                }]
            }]
        })
        new Vue({
            el: '#app',
            router
        })
    </script>
</body>

运行效果图:

4、动态路由

<body>
    <div id='app'>
        <router-link to="/home/11">首页</router-link>
        <router-view></router-view>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script src="node_modules/vue-router/dist/vue-router.js"></script>
    <script>
        const Home = {
            template: `
             <div>
                Home {{ $route.params.id }}
            </div>
            `};
    
        const router = new VueRouter({
            routes: [{
                path: '/',
                redirect: '/home'
            }, {
                path: '/home/:id',
                component: Home
            }]
        })
        new Vue({
            el: '#app',
            router
        })
    </script>
</body>

运行效果图

你可以在一个路由中设置多段“路径参数”,对应的值都会设置到 $route.params 中。例如:

模式匹配路径$route.params
/user/:username/user/evan{ username: 'evan' }
/user/:username/post/:post_id/user/evan/post/123{ username: 'evan', post_id: '123' }

5、命名路由

<body>
    <div id='app'>
        <router-link :to="{name: 'home',params:{id:1}}">命名路由</router-link>
        <router-view></router-view>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script src="node_modules/vue-router/dist/vue-router.js"></script>
    <script>
        const Home = {
            template: `
             <div>
                Home {{ $route.params.id }}
            </div>
            `};
    
        const router = new VueRouter({
            routes: [{
                path: '/',
                redirect: '/home'
            }, {
                path: '/home/:id',
                name: 'home',
                component: Home
            }]
        })
        new Vue({
            el: '#app',
            router
        })
    </script>
</body>

运行效果图

6.路由传参 (主要使用props)

<body>
    <div id='app'>
        <router-link to="/home">路由传参</router-link>
        <router-view></router-view>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script src="node_modules/vue-router/dist/vue-router.js"></script>
    <script>
        const Home = {
            props:['a','b','name'],
            template: `
             <div>
               a+b={{a+b}} 名称: {{name}}
            </div>
            `};
        const router = new VueRouter({
            routes: [ {
                path: '/home',
                component: Home,
                props: { a: 8, b: 10, name: 'coderWang' }
            }]
        })
        new Vue({
            el: '#app',
            router
        })
    </script>
</body>

运行效果图

 

以上就是路由的基本用法,不足之处欢迎留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值