Vue框架之编程式导航

◆ 页面导航的两种方式:
  • 声明式导航:通过点击链接的方式实现的导航
  • 编程式导航:调用js的api方法实现导航
◆ Vue-Router中常见的导航方式:
  • this.$router.push(“hash地址”);
  • this.$router.push("/login");
  • this.$router.push({ name:‘user’ , params: {id:123} });
  • this.$router.push({ path:"/login" });
  • this.$router.push({ path:"/login",query:{username:“jack”} });
  • this.$router.go( n );//n为数字,参考history.go
  • this.$router.go( -1 );
◆ 示例:
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>Document</title>
  <!-- 导入 vue 文件 -->
  <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/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: `<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>
</body>
发布了292 篇原创文章 · 获赞 6 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/sky6even/article/details/104062350