Vue学习笔记——vue-router

视频资源来自:b站coderwhy王红元老师——最全最新Vue、Vuejs教程,从入门到精通
文章仅为个人观看视频后的学习心得笔记,用于个人查看和记录保存。文中定有疏漏错误之处,恳请指正。

==箭头函数==:一种定义函数的方式

//1.定义函数的方式:function
const aaa = function () {
}

//2.对象字面量中定义函数
const obj = {
  bbb: function () {
  },
  bbb() {
  }
}

//3.ES6中的箭头函数
//const ccc = (参数列表)=> {
//}
const ccc = () => {
}
  1. 参数问题

      //放入两个参数
      const sum = (num1,num2) => {
        return num1+num2
      }
      //放入一个参数,小括号省略
      const power = num => {
        return num * num
      }
    
  1.   //代码块中有多行代码
      const test = () => {
        console.log('Hello')
        console.log('World')
      }
      //代码块中只有一行代码,有没有返回值都行
      const nul = (num1,num2) => {
        return num1 +num2
      }
      const nul = (num1,num2) => num1 +num2
    
    

箭头函数的this

箭头函数的this是如何查找的?

向外层作用域中一层层查找this,直到有this的定义

Vuex认识路由

前端渲染,后端渲染

后端路由阶段

1.后端渲染

jsp:java server page

2.后端路由

后端处理URL和页面直接的映射关系

前后端分离阶段

后端只负责提供数据,不负责任何阶段的内容

前端渲染:浏览器中显示的网页中的大部分内容,都是由前端写的js代码在浏览器中执行,最终渲染出来的网页

移动端和网页端的后端不需要进行任何处理,使用同一套api

SPA页面

<font color=#909534>SPA:单页面富应用</font>

整个网页只有一个html页面

每次交互都不用请求新的url。改变url,页面不进行整体的刷新

SPA最主要的特点就是在前后端分离的基础上加了一层前端路由

前端路由的规则

href ->hyper reference

控制台location.hash = 'bdd',可以改变url而不刷新。

history.pushState(data,title,?url)

history.pushState({},'','home'),可以改变url而不刷新。

↑不断push 入栈。history.back()=history.go(-1)出栈返回

go里面的数字表示指针移动多少个值

history.forward()=history.go(1)

history.replaceState({},'','home'),替换,不能返回

vue-router基础

下载:npm install vue-router --save

import router from './router'

如果是个目录(文件夹)会自动找该文件夹里的index文件

1.创建路由组件

import Vue from 'vue'
import VueRouter from 'vue-router'

import Home from '../components/Home'
import About from '../components/About'

//1.通过Vue.use(插件),安装插件
Vue.use(VueRouter)
//2.创建vueRouter对象
const routes =[
  {
    //协议头://host/
    path: '/home',
    component: Home
  },
  {
    path: '/about',
    component: About
  },
  //没有路径时,重定向到home(默认打开首页)
  {
    path: '',
    redirect: '/home'
  }
]
const router = new VueRouter({
  //配置路由器和组件直接的映射关系
  routes,
  //默认情况使用hash改变url,也可改成history
  //mode: 'history'
 // linkActiveClass: 'active'
})

//3.将router对象传入到Vue实例
export default router

配置组件和路径的映射关系

import Home from '../components/Home'
import About from '../components/About'
const routes =[
  {
    //协议头://host/
    path: '/home',
    component: Home
  },
  {
    path: '/about',
    component: About
  },
  //没有路径时,重定向到home(默认打开首页)
  {
    path: '',
    redirect: '/home'
  }
]

3.使用路由

    <router-link to="/home">首页</router-link>
    <router-link to="/about">关于</router-link>
    <router-view></router-view>

<router-link to="/about">关于</router-link>——入口的显示

to:指定跳转的路径

tag:默认渲染成一个<a>标签,="button"时渲染成buttton

replace:默认是可以返回的,加上这个标签(后面不用跟等于),以后就不能返回了

active-class:选择谁,谁的样式就改变为知道class

也可以在router里统一修改:linkActiveClass: 'active'

<router-view>——组件的显示,占位

使用button代替link,用代码实现跳转

    <button @click="homeClick">首页</button>
    <button @click="aboutClick">关于</button>
    <router-view></router-view>
export default {
  name: 'App',
  data(){
    return{
      $router: ''
    }
  },
  methods: {
    homeClick(){
      //通过代码的方式修改路由vue-router
      //this.$router.push('/home')
      this.$router.replace('/home')
      console.log('homeClick')
    },
    aboutClick(){
      //通过代码的方式修改路由vue-router
      this.$router.push('/about')
      console.log('aboutClick')
    }
  }
}

route:(不是router)当前谁处于活跃就是谁

动态路由:

组件User:(两种写法)

    <h2>{{$route.params.userId}}</h2>
    <h2>{{userId}}</h2>
    
    computed: {
      userId(){
        return this.$route.params.userId
      }
    }

父组件App

    <router-link v-bind:to='"/user/"+userId' active-class="active">用户</router-link>
    
 data(){
    return{
      userId:'zhangsan'
    }

路由文件index

  {
    path: '/user/:userId',
    component: User
  }

路由懒加载

一个路由打包一个js文件,用到哪个加载哪个

方法一:结合Vue的异步组件和Webpack的代码分析

方法二:AMD写法

==方法三==:在ES6中, 我们可以有更加简单的写法来组织Vue异步组件和Webpack的代码分割.

const Home = () =>import('../components/Home')
const About = () =>import('../components/About')
const User = () =>import('../components/User')

路由嵌套

子路由:用children

path: '/home',
component: Home,
children: [
  {
  path: '',
 //不加斜杠就默认从上一个路径后面接下去     
  redirect:'news'
},
  {
  path: 'news',
  component:HomeNews
},
{
  path: 'message',
  component:HomeMessage
}]

传递参数

<font color=#909534>Profile -> 档案</font>

加了冒号:即v-bind,就把to=""里面的东西当成语法解析,否则还是字符串。

to="字符串"等价于:to="'字符串'"

URL: 协议://主机:端口/路径?查询

scheme://localhost(:port)/path?query#fragment

传递参数的方式

params的类型:

动态路由

配置路由格式: /router/:id
传递的方式: 在path后面跟上对应的值
传递后形成的路径: /router/123, /router/abc

query的类型:

配置路由格式: /router, 也就是普通配置
传递的方式: 对象中使用query的key作为传递方式
传递后形成的路径: /router?id=123, /router?id=abc

<router-link :to="{path:'/profile',query:{name:'YY',age:18,height:1.88}}" >档案</router-link>
    <h2>{{$route.query.name}}</h2>
    <h2>{{$route.query.age}}</h2>

所有组件都继承着Vue的原型。父类中的方法,子类继承了

导航守卫

生命周期函数

跳转函数实现在指定组件页显示指定title

routes配置都加上

<font color=#909534>meta——元数据(;描述数据的数据)</font>

meta:{
      title:'档案'
    },
//前置守卫
router.beforeEach((to,from,next) =>{
  //从from跳转到to
  document.title =to.matched[0].meta.title
  //下一步,默认原本就有,重写的话也得加上
  next()
})

matched[0]——如果一个父组件有多个子组件,title的元素不会在父组件里,会在子组件里,所以找第一个子组件(一般)的title元素

//后置守卫,不需要主动调用next函数
router.afterEach((to,from) =>{
  console.log('-----')
})

先调用前置守卫。后调用后置守卫

  • 全局守卫

  • 路由独享守卫

    beforeEnter: (to,from,next) =>{}
    
  • 组件内的守卫

keep-alive遇见vue-router

标签在切换时,被反复创建和销毁(用[生命周期函数](# 生命周期函数)来验证)。可以用keep-alive使其保持活性

<keep-alive exclude="Profile,User">
  <router-view></router-view>
</keep-alive>

keep-alive的状态下才能使用 activated/deactived和beforeRouteLeave这两个函数

首页中使用path属性记录离开时的路径,在beforeRouteLeave中记录

//这两个函数,只有该组件被保持了状态,使用了keep-alive时,才是有效的
activated() {
  this.$router.push(this.path);
},
beforeRouteLeave(to,form,next){
  console.log(this.$route.path);
  this.path = this.$route.path;
  next()
}

keep-alive属性:

  1. include - 字符串或正则表达,只有匹配的组件会被缓存
  2. exclude - 字符串或正则表达式(不要随便加空格),任何匹配的组件都不会被缓存

TabBar练习

在组件里的<style>里引用样式

<style>
  @import "./assets/css/base.css";
</style>

如果在js里就不用加@了。因为在style里,就要加@。但是子组件。。。。

样式:

.tab-bar{
  display: flex;
}
.tab-bar-item{
  flex: 1;
  text-align: center;
}

class="tab-bar"放在大div里,class="tab-bar-item"放在选项div。

flex布局(display)

position: fixed;布局位置,left和right都等于0是为了让tab-bar完全盖住页面

box-shadow:水平方向x 垂直方向y 模糊度 阴影的距离 颜色

<img src="https://xiao910888.oss-cn-hangzhou.aliyuncs.com/img/image-20210711144532777.png" alt="image-20210711144532777" style="zoom: 50%;" />

其中颜色:rgba(红,绿,蓝,透明度)。透明度用小数,0不用鞋,直接写.8

flex: 1表示项目等分

text-align: center;在自己的领域居中

一般来说,tab-bar高度为49px。

webpack.base配置

alias: {
  '@': resolve('src'),
  'assets': resolve('src/assets'),
  'components': resolve('src/components'),
  'views': resolve('src/views'),
}

alias

使用时

 src="~assets/img/tabbar/home.svg"
 import TabBar from '@/components/tabbar/TabBar'

总目录:
邂逅Vuejs
Vue基础语法
组件化开发
前端模块化
webpack详解
Vue CLI详解
vue-router
Promise的使用
Vuex详解
网络模块封装
项目实战

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容