Vue2+Vue3基础入门到实战项目(五)——课程学习笔记

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第1张图片

大家好, Capybara 继续与大家一起学习Vue框架。书读百遍其义自见。

day06

路由进阶

路由模块封装

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第2张图片

router/index.js

所抽离内容包括:导入组件、(额外需要)导入Vue、导入VueRouter插件、

创建路由对象、导出路由对象

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第3张图片

需要注意路径写法(推荐使用绝对路径 @代表当前src目录)

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第4张图片

 效果:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第5张图片


Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第6张图片

使用router-link替代a标签实现高亮

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第7张图片

 本质渲染还是a标签,to无需#,且能高亮

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第8张图片

代码:


……

效果:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第9张图片

 本质是a元素

 自带两个可使用高亮类名:

 选中时更改背景颜色:

小结:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第10张图片

精确匹配&模糊匹配

关于两个类名 

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第11张图片

在url后加上one,仍然匹配(router-link-active)

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第12张图片

 设置 .router-link-active

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第13张图片

 小结:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第14张图片

自定义匹配的类名

长有长的好处,不容易重名。 

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第15张图片

配置代码(router/index.js):

import Find from '@/views/Find'
import My from '@/views/My'
import Friend from '@/views/Friend'

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化

// 创建了一个路由对象
const router = new VueRouter({
  // routes 路由规则们
  // route  一条路由规则 { path: 路径, component: 组件 }
  routes: [
    { path: '/find', component: Find },
    { path: '/my', component: My },
    { path: '/friend', component: Friend },
  ],
  // link自定义高亮类名
  linkActiveClass: 'active', // 配置模糊匹配的类名
  linkExactActiveClass: 'exact-active' // 配置精确匹配的类名
})

export default router

浏览器可看到,类名发送变化:

 小结:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第16张图片

声明式导航-跳转传参

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第17张图片

 传参方式有两种:

1.查询参数传参

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第18张图片

 点击链接,从首页跳转到搜索页,希望把链接信息传过去

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第19张图片

 直接跳转

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第20张图片

 (不带参数)关键字写死

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第21张图片

 携带查询参数:

在页面获取参数:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第22张图片

页面显示参数:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第23张图片

如果想要基于参数去发送请求?

在哪发?—— created

获取参

数?this.$route.query.key

2.动态路由传参

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第24张图片

代码:

(router/index.js)

import Home from '../views/Home.vue'
import Search from '../views/Search.vue'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化

// 创建了一个路由对象
const router = new VueRouter({
  routes: [
    { path: '/home', component: Home },
    { path: '/search/:words', component: Search }
  ]
})

export default router

 home.vue





效果:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第25张图片

 两种传参方式的区别

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第26张图片

 小结:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第27张图片

动态路由参数可选符

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第28张图片

路由重定向

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第29张图片

 redirect

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第30张图片

 路由404 

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第31张图片

 添加一个NotFound组件

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第32张图片

 router/index.js

import Home from '@/views/Home'
import Search from '@/views/Search'
import NotFound from '@/views/NotFound'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化

// 创建了一个路由对象
const router = new VueRouter({
  routes: [
    { path: '/', redirect: '/home' },
    { path: '/home', component: Home },
    { path: '/search/:words?', component: Search },
    { path: '*', component: NotFound }
  ]
})

export default router

效果(访问 list 无匹配):

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第33张图片

路由模式

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第34张图片

 router/index.js

import Home from '@/views/Home'
import Search from '@/views/Search'
import NotFound from '@/views/NotFound'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化

// 创建了一个路由对象
const router = new VueRouter({
  // 注意:一旦采用了 history 模式,地址栏就没有 #,需要后台配置访问规则
  mode: 'history',
  routes: [
    { path: '/', redirect: '/home' },
    { path: '/home', component: Home },
    { name: 'search', path: '/search/:words?', component: Search },
    { path: '*', component: NotFound }
  ]
})

export default router

编程式导航

用JS代码来进行跳转

      1. 通过路径的方式跳转

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第35张图片

      // (1) this.$router.push('路由路径') [简写]
      // this.$router.push('/search')

      // (2) this.$router.push({     [完整写法]
      //         path: '路由路径' 
      //     })
      // this.$router.push({
      //   path: '/search'
      // })

      2. 通过命名路由的方式跳转

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第36张图片

        (需要给路由起名字) 适合长路径
      //    this.$router.push({
      //        name: '路由名'
      //    })

router/index.js

import Home from '@/views/Home'
import Search from '@/views/Search'
import NotFound from '@/views/NotFound'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化

// 创建了一个路由对象
const router = new VueRouter({
  // 注意:一旦采用了 history 模式,地址栏就没有 #,需要后台配置访问规则
  mode: 'history',
  routes: [
    { path: '/', redirect: '/home' },
    { path: '/home', component: Home },
    { name: 'search', path: '/search/:words?', component: Search },
    { path: '*', component: NotFound }
  ]
})

export default router

Home.vue





小结:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第37张图片

编程式导航传参 ( 查询参数传参 & 动态路由传参 )

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第38张图片

path路径跳转传参

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第39张图片

传入输入框内容:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第40张图片

        两种传参方式:查询参数传参和动态路由传参 都支持

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第41张图片

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第42张图片

        完整写法更适合多参数情况(不用一个一个拼接)

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第43张图片

name命名路由跳转传参

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第44张图片

 在路由中配置动态路由

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第45张图片

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第46张图片

 使用params传参

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第47张图片

在所跳转的组件中,通过 $route.params.参数名 获取传入参数值

代码:

router/index.js

import Home from '@/views/Home'
import Search from '@/views/Search'
import NotFound from '@/views/NotFound'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化

// 创建了一个路由对象
const router = new VueRouter({
  // 注意:一旦采用了 history 模式,地址栏就没有 #,需要后台配置访问规则
  mode: 'history',
  routes: [
    { path: '/', redirect: '/home' },
    { path: '/home', component: Home },
    { name: 'search', path: '/search/:words?', component: Search },
    { path: '*', component: NotFound }
  ]
})

export default router

 Home.vue




……

小结:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第48张图片

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第49张图片

 个人总结

路由导航 传参 跳转  三问:

1.哪种路由导航?

2.传参方式是什么?

3.如果是编程式导航,跳转方式是什么?

路由导航的种类有两种:

1.声明式导航——使用router-link组件,点击后跳转  路由跳转的方法:

2.编程式导航——触发事件,用JS代码来进行跳转   路由跳转的方法: this.$router.push()

路由传参方式也有两种:

1.查询参数传参——在路由中拼接查询参数 形式:?key=value

        传过去的参数,通过 this.$route.query.key 获取

2.动态路由传参——在路由中直接拼接参数 形式:/value (前提:在router中配置动态路由 '…/:key' )

        传过去的参数,通过 this.$route.params.key 获取

编程式导航的跳转方式有两种:

path 路径跳转

name 命名路由跳转

传参方式   跳转方式 可以两两组合,实现 携带参数的路由跳转

其中 $router.push() 方法的实参有两种写法:($router.push()  ——>  编程式导航 

         1.简写:$router.push('路由路径')

        ①编程式导航-查询参数传参-path路径跳转

        ②编程式导航-动态路由传参-path路径跳转

        2.完整写法(更适合传参,不用一个一个参数拼接)

        其中,命名路由跳转只能使用完整写法

         ①编程式导航-查询参数传参-path路径跳转

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第50张图片

         ②编程式导航-动态路由传参-path路径跳转

        ③编程式导航-查询参数传参-name命名跳转

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第51张图片

        ④编程式导航-动态路由传参-name命名跳转

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第52张图片

根据查询

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第53张图片

声明式导航   也可以使用   命名路由跳转   方式

个人认为:

在元素(router-link)的属性写一个对象(JS代码)阅读性较差,故少用

综合案例:面经基础版

案例分析:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第54张图片

面经基础版-路由配置

一级路由

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第55张图片

二级路由(还要准备第二级路由出口)

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第56张图片

二级路由出口

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第57张图片

高亮,a换成router-link,推荐使用模糊匹配类名,router-link-active

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第58张图片

加上高亮样式

效果:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第59张图片

面经基础版-首页请求渲染

步骤:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第60张图片

请求数据:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第61张图片

然后在模板中渲染即可。

面经基础版-传参(查询参数&动态路由)

注册点击事件:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第62张图片

传参方式:

查询参数传参:

地址栏处会带上id:

动态路由传参(单个参数更优雅方便):

配置动态路由

不用写上   id=

修复小bug

回到首页时:

出现空白(因为没有匹配到任何二级路由)

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第63张图片

解决办法:重定向

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第64张图片

给头部导航的返回小箭头添加返回功能( $router.back() ):

面经基础版-详情页渲染

发送请求获取数据:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第65张图片

插值语法渲染:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第66张图片

有时候出现空白:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第67张图片

有的内容没渲染出来

为什么?发请求需要时间,有一小段时间,article为空。

解决方法:加上v-if,有内容才去渲染

面经基础版-缓存组件

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第68张图片

 keep-alive

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第69张图片

实操:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第70张图片

detail也被缓存了(不需要被缓存)

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第71张图片

注意:name优先级更高

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第72张图片

使用keep-alive的include属性

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第73张图片

被缓存组件多两个生命周期钩子

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第74张图片

实操:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第75张图片

进入时:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第76张图片

点击面经进入详情页面后,再返回,created mounted destroyed不会再被触发。

如果希望回到首页有提示等,在哪实现?

提供了actived deactived

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第77张图片

小结:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第78张图片

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第79张图片

自定义创建项目

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第80张图片

1.安装脚手架 (已安装)

npm i @vue/cli -g

2.创建项目

vue create hm-exp-mobile
  • 选项

Vue CLI v5.0.8
? Please pick a preset:
  Default ([Vue 3] babel, eslint)
  Default ([Vue 2] babel, eslint)
> Manually select features     选自定义
  • 手动选择功能

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第81张图片

  • 选择vue的版本

  3.x
> 2.x
  • 是否使用history模式

  • 选择css预处理

  • 选择eslint的风格 (eslint 代码规范的检验工具,检验代码是否符合规范)

  • 比如:const age = 18; => 报错!多加了分号!后面有工具,一保存,全部格式化成最规范的样子

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第82张图片

  • 选择校验的时机 (直接回车)

  • 选择配置文件的生成方式 (直接回车)

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第83张图片

  • 是否保存预设,下次直接使用? => 不保存,输入 N

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第84张图片

  • 等待安装,项目初始化完成

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第85张图片

  • 启动项目

cd 
npm run serve

ESLint手动修正代码规范错误

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第86张图片

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第87张图片

举例:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第88张图片

使用注意:

以 vue create 的文件夹(目录)作为根目录

运行报错:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第89张图片

根据规范说明找错:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第90张图片

理解错误:

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第91张图片

ESLint自动修正代码规范错误

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第92张图片

设置——>打开设置

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记_第93张图片

你可能感兴趣的:(Vue学习,学习,笔记,vue.js,javascript)