vue的路由器配置

vue的路由器配置

1.安装vue-router

npm i vue-router

2.搭建vue-router环境

(1). 将vue-router注册为vue的插件

router/touter.js:

   import VueRouter from "vue-router";
   Vue.use(VueRouter)

(2). 创建路由组件 并 进行路径映射

a.创建pages目录,在里面创建对应的路由

b.routers/routers.js:

import about from "../pages/about"
import home from "../pages/home"
const routes = [
  {path:"/about",component:about},
  {path:"/home",component:home}
]
export default routes

(3). 创建路由器 并 注册路由

router/touter.js:

const router = new VueRouter({
  routes
})
export default router

(4). 注册路由器

在入口文件main.js中:

new Vue({
  el: '#app',
  components: { App },
  template: '<App/>',
  router
})

(5). 路由组件的占位

app中:

<template>
  <div id="app">
    <div class="row">
      <div class="col-xs-offset-2 col-xs-8">
        <div class="page-header"><h2>Router Basic</h2></div>
      </div>
    </div>
    <div class="row">
      <div class="col-xs-2 col-xs-offset-2">
        <div class="list-group">
          <router-link to="/about" class="list-group-item">About</router-link>
          <router-link to="/home" class="list-group-item">Home</router-link>
        </div>
      </div>
      <div class="col-xs-6">
        <div data-v-957c9522="" class="col-xs-6">
          <div data-v-957c9522="" class="panel">
            <div data-v-957c9522="" class="panel-body">
              <router-view></router-view>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

(6). 设计路由导航

<template>
  <div id="app">
    <div class="row">
      <div class="col-xs-offset-2 col-xs-8">
        <div class="page-header"><h2>Router Basic</h2></div>
      </div>
    </div>
    <div class="row">
      <div class="col-xs-2 col-xs-offset-2">
        <div class="list-group">
          <router-link to="/about" class="list-group-item">About</router-link>
          <router-link to="/home" class="list-group-item">Home</router-link>
        </div>
      </div>
      <div class="col-xs-6">
        <div data-v-957c9522="" class="col-xs-6">
          <div data-v-957c9522="" class="panel">
            <div data-v-957c9522="" class="panel-body">
              <router-view></router-view>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

3.搭建vue-router环境(分模块)

pages : 存放路由组件
routes : 路由
router : 路由器

4.重定向

routers/routers.js:

const routes = [
  {path:"/about",component:about},
  {path:"/home",component:home},
  {path:"/",redirect:"/about"}
]

5.嵌套路由

弄清楚路由组件到底在哪渲染;一级路由组件在app的router-view上渲染
二三…级路由组件在其上一级的路由组件中的router-view上进行渲染

import about from "../pages/about"
import home from "../pages/home"
import news from "../pages/news"
import message from "../pages/message"
const routes = [
  //普通路由
  {path:"/about",component:about},
  //嵌套路由
  {
    path:"/home",
    component:home,
    children:[
      {path:"news",component:news},
      {path:"message",component:message},
      {path:"",redirect:"news"},
    ]
  },
  {path:"/",redirect:"/about"}
]
export default routes

6.动态路由

a.基本配置 & 基本使用
b.如何获取动态路由的相关信息;通过$route来获取
c.当同一个动态路由产生切换时;对应的路由组件的生命周期得不到执行;我们需要手动的监听$route

//about,home,user是一级路由
//news和message是home的二级路由
import about from "../pages/about"
import home from "../pages/home"
import news from "../pages/news"
import message from "../pages/message"
import user from "../pages/user"
import userDeatil from "../pages/userDeatil"
const routes = [
  // 普通路由
  {path:"/about",component:about},
  // 嵌套路由
  {
    path:"/home",
    component:home,
    children:[
      {path:"news",component:news},
      {path:"message",component:message},
      {path:"",redirect:"news"},
    ]
  },
  //基本动态路由:
  **
  userDeatil是user的子路由,userDeatil是动态路由。
  不管id为多少,都可以打中同一个路由,就是userDeatil子动态路由
  **
  //动态路由  ?代表:id可以被匹配0到1次
  // {path:"/user/:id?",component:user},
  {
    path:"/user",
    component:user,
    children:[
      {path:":id",component:userDeatil}
    ]
  },
  {path:"/",redirect:"/about"}
]
export default routes

**
在user一级路由中注册并定义方法根据id去打中userDeatil子路由,
根据v-model去抓取id,  data中接受id,在methods定义方法去打中
这个子路由进行路由跳转。
    methods:{
          go(){
            //进行路由跳转
            this.$router.push(`/user/${this.id}`)
          }
        }
**

//深入动态路由:

//about,home,user,test是一级路由
//news和message是home的二级路由
//userDeatil是三级路由

import about from "../pages/about"
import home from "../pages/home"
import news from "../pages/news"
import message from "../pages/message"
import user from "../pages/user"
import userDeatil from "../pages/userDeatil"
import test from "../pages/test"
const routes = [
  // 普通路由
  {path:"/about",component:about},
  // 嵌套路由
  {
    path:"/home",
    component:home,
    children:[
      {path:"news",component:news},
      {path:"message",component:message},
      {path:"",redirect:"news"},
    ]
  },
  //动态路由  ?代表:id可以被匹配0到1次
  {path:"/test/:id?",component:test},
  {
    path:"/user",
    component:user,
    children:[
      {name:"user",path:":id",component:userDeatil}
    ]
  },
  {path:"/",redirect:"/about"}
]
export default routes


**
在user一级路由中注册并定义方法根据id去打中userDeatil子路由,
根据v-model去抓取id,  data中接受id,在methods定义方法去打中
这个子路由进行编程式路由跳转。

        methods:{
          go(){
            //进行编程式路由跳转(字符串的形式)
            // this.$router.push(`/user/${this.id}?name=damu&age=18#888`)

            // 进行编程式路由跳转(对象的形式)
            /*this.$router.push({
              path:`/user/${this.id}`,
              query:{
                name:"damu666",
                age:188
              },
              hash:"#678"
            })*/

            //进行编程式路由跳转(对象的形式) path和params不能同时出现
            //如果同时出现则使用命名路由name
            this.$router.push({
              // path:`/user`,
              name:"user",
              params:{
                id:this.id
              },
              query:{
                name:"damu666",
                age:188
              },
              hash:"#678"
            })
          }
        }
**

补充:

     // {
          //    fullpath:"",   path+query+hash
          //    hash:"",
          //    params:{搜集冒号后面的值 在此处是id}      path中:对应的数据
          //    query:{}
          //    path:"",  在此处为/user/${this.id}
          // }

7.编程式导航 vs 声明式导航

声明式导航 : <router-link to="path">
编程式导航 :
        $router.push(路径字符串)
        $router.push(对象)
            {path:路径字符串}
            {
                path:路径字符串.path,
                query:路径字符串.query,
                hash:路径字符串.hash
            }
            {
                name:命名路由的名称, //在配置路由时一定要给对应的路由起名字
                params:路径字符串.params,
                query:路径字符串.query,
                hash:路径字符串.hash
            }

8.路由配置

name:命名路由;字符串
path:匹配路径;字符串
component:路由组件;组件对象
children:子路由配置;子路由配置组成的数组
props:布尔值 对象 函数
redirect:路径字符串

解耦
在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性。

使用 props 将组件和路由解耦:

import about from "../pages/about"
import home from "../pages/home"
import news from "../pages/news"
import message from "../pages/message"
import user from "../pages/user"
import userDeatil from "../pages/userDeatil"
import test from "../pages/test"
const routes = [
  // 普通路由
  {path:"/about",component:about},
  // 嵌套路由
  {
    path:"/home",
    component:home,
    children:[
      {path:"news",component:news},
      {path:"message",component:message},
      {path:"",redirect:"news"},
    ]
  },
  //动态路由  ?代表:id可以被匹配0到1次
  //props:true  代表我们将:id对应的数据自动通过props的形式传递给test组件

  // {path:"/test/:id?",component:test,props: true },布尔模式
  **如果 props 被设置为 true,route.params 将会被设置为组件属性。类似于父组件通过props进行数据传递**
  
  // {path:"/test/:id?",component:test,props: {a:"a",b:"b"} }, 对象模式
**如果 props 是一个对象,它会被按原样设置为组件属性。**

  {path:"/test/:id?",component:test,props: route => ({
                                                id:route.params.id,
                                                name:route.query.name,
                                                age:route.hash.split("#")[1]
                                            }) },函数模式
 **你可以创建一个函数返回 props。函数的参数是当前route对象**
                                            
  {
    path:"/user",
    component:user,
    children:[
      {name:"user",path:":id",component:userDeatil }
    ]
  },
  {path:"/",redirect:"/about"}
]
export default routes

//哪个组件需要就传参到哪个组件中
<template>
    <div>test {{id}} - {{name}} -{{age}}</div>
</template>

<script>
    export default {
        name: "test",
        props:["id","name","age"]
    }
</script>

9.路由器配置

routes: 注册路由
mode
类型: string
默认值: “hash” (浏览器环境)
可选值: “hash” | “history”
配置路由模式:
hash: 使用 URL hash 值来作路由。支持所有浏览器,包括不支持 HTML5 History Api 的浏览器。//端口号与path之间有一个#号 刷新页面不会丢失静态资源中的css样式
history: 依赖 HTML5 History API 和服务器配置。查看 HTML5 History 模式。 //刷新页面会丢失静态资源中的css样式。解决方案:将index.html中样式引入的路径改为绝对路径

linkActiveClass
类型: string
默认值: “router-link-active”
全局配置 的默认“激活 class 类名”。

linkExactActiveClass
类型: string
默认值: “router-link-exact-active”
全局配置 精确激活的默认的 class。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值