Vue前端路由

1.路由基本实现

因为是基于vue的前端路由 所以需要先引入Vue 之后再引用vue-router.
1.首先要找到示例vue控制的区域 留下一个路由占位符 <router-view></router-view> 显示模板的内容
2.在vue中有一个新的标签 <router-link to="/user">User</router-link> 和a标签相似 to="/user 就等价于 herf=’#/user’
3.要在script中写跳转的模板
4.将模板挂载到示例的路由上
5.再将路由挂载到示例的vue对象上
代码如下

<body>
    <!-- 被 vm 实例所控制的区域 -->
    <div id="app">
        <router-link to="/user">User</router-link>
        <router-link to="/page">Page</router-link>
        <!-- 路由占位符   显示模板中的内容-->
        <router-view></router-view>
    </div>

    <script>
        //写两个路由的模板
        const User = {
            template: '<h1>User页面</h1>'
        }
        const Page = {
            template: '<h1>Page页面</h1>'
        }
        //路由规则  有两个属性  一个是地址path  另一个是模板component
        const router = new VueRouter({
            routes: [{
                    path: '/user',
                    component: User
                },
                {
                    path: '/page',
                    component: Page
                }
            ]
        })
        //示例一个vue  将服务器挂载到vm中
        const vm = new Vue({
            el: '#app',
            data: {},
            router: router
        })
    </script>
</body>

2.路由的重定向

路由的重定向十分简单 需要在你规定的路由上加上redirect 后面写地址 就可以

const router = new VueRouter({
    routes: [{
            path: '/',
            redirect: '/user'
        }
       
    ]
})

3.路由嵌套

1.要在被嵌套路由的模板上留下占位符 <router-view></router-view> 显示嵌套模板的内容
2.写被嵌套的模板
3.因为是嵌套路由 在被规定路由规则中找到被嵌套的路由 在后面添加children数组 数组中写嵌套的路由

 <script src="lib/vue_2.5.22.js"></script>
    <script src="lib/vue-router_3.0.2.js"></script>
</head>

<body>
    <!-- 被 vm 实例所控制的区域 -->
    <div id="app">
        <router-link to="/user">User</router-link>
        <router-link to="/page">Page</router-link>
        <!-- 路由占位符   显示模板中的内容-->
        <router-view></router-view>
    </div>

    <script>
        //写两个路由的模板
        const User = {
            template: '<h1>User页面</h1>'
        }
        const Page = {
            template: `
            <div >
            <h1>Page页面</h1>
            <hr />
                <router-link to="/page/table1">table1</router-link>
                <router-link to="/page/table2">table2</router-link>
                <!-- 路由占位符   显示模板中的内容-->
                <router-view></router-view>
            </div>
            `
        }
        const table1 = {
            template: '<h4>table1页面</h4>'
        }
        const table2 = {
            template: '<h4>table2页面</h4>'
        }
        //路由规则  有两个属性  一个是地址path  另一个是模板component
        const router = new VueRouter({
            routes: [{
                    path: '/',
                    redirect: '/user'
                },
                {
                    path: '/user',
                    component: User
                },
                {
                    path: '/page',
                    component: Page,
                    children: [{
                            path: '/page/table1',
                            component: table1
                        },
                        {
                            path: '/page/table2',
                            component: table2
                        }
                    ]
                }
            ]
        })
        //示例一个vue  将服务器挂载到vm中
        const vm = new Vue({
            el: '#app',
            data: {},
            router: router
        })
    </script>
</body>

4.动态路由的匹配

在跳转的时候有可能会出现/user/1 /user/2 这种前面一样 只有后面有一些区别的路径 这个时候可以用 /user/:id 来表示 后面设置 props: true 在模板中想用的时候 props: [‘id’], 来调用

<div id="app">
      <router-link to="/user/1">User1</router-link>
      <router-link to="/user/2">User2</router-link>
      <router-link to="/user/3">User3</router-link>
      <router-link to="/register">Register</router-link>

      <!-- 路由占位符 -->
      <router-view></router-view>
    </div>

    <script>
      const User = {
        props: ['id'],
        template: '<h1>User 组件 -- 用户id为: {{id}}</h1>'
      }

      const Register = {
        template: '<h1>Register 组件</h1>'
      }

      // 创建路由实例对象
      const router = new VueRouter({
        // 所有的路由规则
        routes: [
          { path: '/', redirect: '/user'},
          { path: '/user/:id', component: User, props: true },
          { path: '/register', component: Register }
        ]
      })

      // 创建 vm 实例对象
      const vm = new Vue({
        // 指定控制的区域
        el: '#app',
        data: {},
        // 挂载路由实例对象
        // router: router
        router
      })
    </script>

如果想传递一些静=静态的数据

<script>
      const User = {
        props: ['id', 'uname', 'age'],
        template: '<h1>User 组件 -- 用户id为: {{id}} -- 姓名为:{{uname}} -- 年龄为:{{age}}</h1>'
      }

      const Register = {
        template: '<h1>Register 组件</h1>'
      }

      // 创建路由实例对象
      const router = new VueRouter({
        // 所有的路由规则
        routes: [
          { path: '/', redirect: '/user'},
          { path: '/user/:id', component: User, props: { uname: 'lisi', age: 20 } },
          { path: '/register', component: Register }
        ]
      })

如果想动静结合 route.params.id可获取动态的id

<script>
      const User = {
        props: ['id', 'uname', 'age'],
        template: '<h1>User 组件 -- 用户id为: {{id}} -- 姓名为:{{uname}} -- 年龄为:{{age}}</h1>'
      }

      const Register = {
        template: '<h1>Register 组件</h1>'
      }

      // 创建路由实例对象
      const router = new VueRouter({
        // 所有的路由规则
        routes: [
          { path: '/', redirect: '/user' },
          {
            path: '/user/:id',
            component: User,
            props: route => ({ uname: 'zs', age: 20, id: route.params.id })
          },
          { path: '/register', component: Register }
        ]
      })

5.命名路由

命名路由只不过是另一种书写方式而已
在路由规定中加入了name’属性
传地址的时候可以直接通过传递name来跳转路由

<div id="app">
      <router-link to="/user/1">User1</router-link>
      <router-link to="/user/2">User2</router-link>
      <router-link :to="{ name: 'user', params: {id: 3} }">User3</router-link>
      <router-link to="/register">Register</router-link>

      <!-- 路由占位符 -->
      <router-view></router-view>
    </div>

    <script>
      const User = {
        props: ['id', 'uname', 'age'],
        template: '<h1>User 组件 -- 用户id为: {{id}} -- 姓名为:{{uname}} -- 年龄为:{{age}}</h1>'
      }

      const Register = {
        template: '<h1>Register 组件</h1>'
      }

      // 创建路由实例对象
      const router = new VueRouter({
        // 所有的路由规则
        routes: [
          { path: '/', redirect: '/user' },
          {
            // 命名路由
            name: 'user',
            path: '/user/:id',
            component: User,
            props: route => ({ uname: 'zs', age: 20, id: route.params.id })
          },
          { path: '/register', component: Register }
        ]
      })

      // 创建 vm 实例对象
      const vm = new Vue({
        // 指定控制的区域
        el: '#app',
        data: {},
        // 挂载路由实例对象
        // router: router
        router
      })

6.编程式导航

用函数的方式来进行页面的跳转
this. r o u t e r . g o ( − 1 ) 退 后 页 面 t h i s . router.go(-1) 退后页面 this. router.go(1)退this.router.push(’/userinfo/’)到这个页面中去

<script>
      const User = {
        props: ['id', 'uname', 'age'],
        template: `<div>
          <h1>User 组件 -- 用户id为: {{id}} -- 姓名为:{{uname}} -- 年龄为:{{age}}</h1>
          <button @click="goRegister">跳转到注册页面</button>
        </div>`,
        methods: {
          goRegister() {
            this.$router.push('/register')
          }
        },
      }

      const Register = {
        template: `<div>
          <h1>Register 组件</h1>
          <button @click="goBack">后退</button>
        </div>`,
        methods: {
          goBack() {
            this.$router.go(-1)
          }
        }
      }

      // 创建路由实例对象
      const router = new VueRouter({
        // 所有的路由规则
        routes: [
          { path: '/', redirect: '/user' },
          {
            // 命名路由
            name: 'user',
            path: '/user/:id',
            component: User,
            props: route => ({ uname: 'zs', age: 20, id: route.params.id })
          },
          { path: '/register', component: Register }
        ]
      })

      // 创建 vm 实例对象
      const vm = new Vue({
        // 指定控制的区域
        el: '#app',
        data: {},
        // 挂载路由实例对象
        // router: router
        router
      })
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值