【vue】------ 路由创建 ------ 【William】

dongwei1 2019-08-04 原文

【vue】—— 路由创建 —— 【William】

路由常用的配置项:

path:路由请求的路径

component:路由匹配成功后需要渲染的组件或者页面

tag:改变组件内部渲染的元素 假设组件内部渲染的是a标签 tag="li" 那么li就会替换a

import Router from 'vue-router'
import Home from "./views/Home.vue";
import List from "./views/list.vue";
Vue.use(Router)


//路由的配置项
export default new Router({
//每一个路由的配置项,每一个路由都是一个对象
    routes: [
{
        //请求的路径 pathname
        path:"/home",
        //path路径匹配成功后渲染哪个组件/页面
        component:Home
    },
    {
        path:"/list",
        component:List
        }
    ]
})

路由跳转的方式:

1、<a href="#/home"></a>

2、<router-link to="/home"></router-link>

to的路径会与path进行匹配,如果匹配成功会渲染component对应的组件

组件怎样才能在页面上进行展示:
    必须依赖一个内置组件
        <router-view></router-view> //展示路径匹配成功以后相对应的组件

3、直接调用$router.push 实现携带参数的跳转
getDescribe(id){
    this.$router.push({
        path:'/describe/${id}',
    })
}

路由的重定向:

redirect:重定向   (当访问一个路径时想展示另一个路径的页面)

{
path:"/",
redirect:"/home"
}

路由嵌套:

children:路由嵌套

    children是一个数组 数组里存放对象 每一个对象都是下一级的路由的配置项 配置项的属性与routes里面的属性一样

name:命名路由 给当前路由取一个别名


children:[
    {
        name:"city",
        path:"city",
        component:City
    }
]

路由传参:

路由传参:

路由的传参接收方式统一在this.$route里面

1、query传值接收方式

query传值?后面的参数 &进行链接 /user?name=zhangsan&age=18

传值的方式:通过?进行数据的拼接 每个字段之间用&分隔 类似与get请求的方式
接收:this.$route.query

router.js页面:
{
    name:"detail",
    path:"/detail",
    component:Detail,
}

传递参数地址页面:
        //query传值接收方式
    let {id,name} = this.$route.query;
    this.id = id;
    this.name = name;

所要跳转的路径:

1<div class="app">
<ul>
        <Router-link
            v-for="(item,index) in goods"
            :to="'/detail?id='+item.id+'&name='+item.goodsName"
            tag="li"
            >

        <h2>{{item.goodsName}}</h2>
</Router-link>
</ul>
<router-view></router-view>
</div>

2<div class="app">
<ul>
       <Router-link
            v-for="(item,index) in goods"
            :to="{name:'detail',query:{id:item.id,name:item.goodsName}}"
            tag="li"
                >

        <h2>{{item.goodsName}}</h2>
</Router-link>
</ul>
<router-view></router-view>
</div>



2、动态路径接收方式

在路由的配置项path中,设定传递参数的属性 方式为 /:属性.....
在路由跳转的属性中 设置属性的值 方式为 /detail/0/苹果

接收:this.$route.params

router.js页面:
{
    name:"detail",
    path:"/detail/:id/:name",
    component:Detail,
}
  
传递参数地址页面:
    //动态路径接收方式
    let {id,name} = this.$route.params;
    this.id = id;
    this.name = name; 

所要跳转的路径: 
1<div class="app">
<ul>
  <Router-link
     v-for="(item,index) in goods"
     :to="'/detail/'+item.id+'/'+item.goodsName"
     tag="li">
    <h2>{{item.goodsName}}</h2>
  </Router-link>
</ul>
<router-view></router-view>
</div>

2<div class="app">

<ul>
   <Router-link
      v-for="(item,index) in goods"
      :to="{name:'detail',params:{id:item.id+'',name:item.goodsName}}"
      tag="li">
      <h2>{{item.goodsName}}</h2>
  </Router-link>
</ul>
<router-view></router-view>
</div>


3、props接收方法

router.js页面:
    {
        name:"detail",
        path:"/detail/:id/:name",
        component:Detail,
        props:true,
    }

传递参数地址页面:
    props:{
        id:{
            type:String,
            default:""
    },
    name:{
        type:String,
        default:""
    }
},

动态路由传值与query传值的区别:

query传值是非必须传值 动态路由传值是必须要传值

路由钩子函数 路由守卫:

beforRouteEnter 路由进入之前
1、热力图
2、登陆验证
3、权限验证
4、会员 VIP验证
5、验证商品携带信息是否完整

在当前钩子函数中是访问不到this的,因为还没有进入当前组件所以this为undefined
如果需要使用this则需要在next中使用回调,回调中的第一个参数就是组件的实例

进入路由之前
props:{
    id:{
        type:String,
        default:""
    },
    name:{
        type:String,
        default:""
    }
}

beforeRouteEnter(to,from,next){

//to 到哪里去 from 从哪来 next执行下一步
document.title = to.meta.title

next((vm)=>{

console.log(vm);

});
},


beforRouteUpdate 路由更新的时候

当路由发生了改变,但是当前组件没有经历创建和销毁的时候,如果我们需要接收路由传递过来的数据时
我们就需要用到了beforRouteUpdate

props:{
    id:{
        type:String,
        default:""
    },
    name:{
        type:String,
        default:""
    }
}

beforeRouteUpdate (to,from,next) {
//当路由发生改变的时候
   console.log("执行了")

    this.id = to.params.id;

    this.name = to.params.name;

    next();
}


beforRouteLeave 路由离开的时候
1、信息没有填写完成
2、答题系统
3、支付
4、退出登陆

当路由离开的时候
props:{
    id:{
        type:String,
        default:""
    },
    name:{
        type:String,
        default:""
    }
}

beforeRouteLeave(to,from,next){
    var flag = window.confirm("您确定要离开吗?");
        if(flag){
            next();
    }
}
 
全局守卫 全局钩子函数:
beforEach 一般情况下用来做一些路由公众部分的验证 登陆验证

router.beforeEach((to, from, next) => {
    if(to.meta.requireAuth){
        next();
    }else{
        if(getCookie("X-TOKEN")){
        next()
    }else{
        next("/login");
        }
    }
})

 

发表于 2019-08-04 12:20 金风夜雨 阅读() 评论() 编辑 收藏

 

版权声明:本文为dongwei1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/dongwei1/p/11297825.html

【vue】------ 路由创建 ------ 【William】的更多相关文章

  1. vue pc端element 移动端vant

    vue 框架UI库 pc端element     移动端vant...

  2. Atom 编辑器安装 linter-eslint 插件,并配置使其支持 vue 文件中的 js 格式校验

    安装方式有如下几种. 1.最常用的安装方式. # 进入atom插件文件夹 cd ~/.atom/package […]...

  3. vue h5转换uni-app指南(vue转uni、h5转uni)

    如果你已经有了一个基于vue开发的H5站点,想转换为uni-app。 首先注意2个前提: 1、你的web站是适 […]...

  4. vue的传参方式和router使用技巧

    vue传参方法一 1,路由配置 { path: '/describe/:id', name: 'Describ […]...

  5. Vue 项目代理设置的优化

    Vue 项目代理设置的优化 Vue 类的项目开发中项目结构基本都是类似于 Vue-cli 生成的方式, 这种方 […]...

  6. Flask + vue 前后端分离的 二手书App

    一个Flask + vue 前后端分离的 二手书App 效果展示: 所用技术清单 项目地址:项目地址 vue代 […]...

  7. vue的移动app项目中,自定义拖拽指令的问题

    使用vue的都知道vue有一个自定义指令,我比较喜欢的就是拖拽的自定义指令,感觉挺方便的! //组件内的拖拽指 […]...

  8. vue-cli3.0读取外部化配置文件来修改公共路径

      之前我写过一篇通过nginx配置代理转发的博客,正常来说也是正确的,但不足之处在了甲方还用了F5负载均衡和 […]...

随机推荐

  1. 如何将本地项目推送到码云仓库-带步骤截图。

    将本地项目推送到码云仓库。 前提: git  和码云    1、在码云上先创建一个仓库。     2.在要被上 […]...

  2. 系统安装SQL Sever2000后1433端口未开放,如何打开1433端口的解决方法

    这篇文章主要针对Win2003系统安装SQL Sever2000后1433端口未开放,如何打开1433端口的解 […]...

  3. STM32 0.96OLED I2C 显示(转载)

    转载于:https://www.cnblogs.com/hjf-log/p/stm32-oled.html 使 […]...

  4. 裕民银行 x mPaaS | 移动应用“适老化”改造,可不止是字体变大

    一场疫情改写了银行业的规则。 街道被封闭,城市空无一人。那个肃杀的冬季已经离我们远去,但对刚成立不久的小型银行 […]...

  5. Win10多种激活密钥让你傻傻分不清 一文看懂OEM、GVLK、KMS等密钥区别 – 雪洗中关村

    Win10多种激活密钥让你傻傻分不清 一文看懂OEM、GVLK、KMS等密钥区别   https://www. […]...

  6. mysql如何分类统计数量

    比如我表test里面有id,mc,xh三个字段(分别是自动编号,钢材名称(若干种),钢材型号(大号,中号,小号 […]...

  7. 常用网络端口列表

    TCP端口 0 – 2869 TCP端口                7 = 回显 389 = […]...

  8. Redis 学习笔记(一)存储结构及五大数据类型

    1. Redis 简介 Redis 是一个开源的、高性能的、基于键值对的缓存与存储系统,通过提供多种键值数据类 […]...

展开目录

目录导航