vue-router+poster指令+indexOf()方法

123 阅读3分钟

1、路由

路由指标记和资源的配对;路由器的作用,给终端分配标记。

2、前端路由

路径和组件的映射关系

image-20220523121020078

image-20220523144345479

3、组件分类

.vue文件分2类, 一个是页面组件, 一个是复用组件vue文件本质无区别

image-20220523121842404

image-20220523121818060

image-20220523221334187

4、vue-router模块

本质是一个第三方包

路由环境下载步骤:

1、下载模板 npm i vue-router@3----vue2装这个,vue3装npm i vue-router@4

2、在main.js导入vue-router模板," import Router(此名可以随便定义) from 'vue-router' "

3、在Vue安装/注册这个库,'Vue.use(Router)',这里的Router和上面保持一致

4、创建一个实例,'const router=new Router({ 这里可以有配置对象 })',这里的Router也和上面保持一致

5、挂载到new Vue 根实例上,'new Vue({ router , render:h=>h(App),}).$mount('#app')'

image-20220523145318459

注意: new Vue里的router属性名是固定的,值为实例对象。

路由使用:

image-20220523153814827

router-view为挂载点。

总步骤:

image-20220523155759506

image-20220523224609666

注意: 一切都要以url上hash值为准

image-20220603111238626

5、声明式导航

image-20220523160454454

image-20220523160747776

注意: 虽然自带了类名,不过还是要自己设置样式。

5.1声明式导航-跳转传参

image-20220523161729413

6、路由-重定向和模式

设置页面一进来默认进入某个页面。

image-20220523164800853

image-20220523230614674

6.1路由-404

image-20220523165143913

image-20220523165154839

image-20220523231444264

6.2路由-模式设置

image-20220523170006188

通过设置history,把#去掉,需要和后端一起配置。去掉#号就是好看些。

7、编程式导航

以js方式实现切换。

image-20220523232521583

image-20220523171637159

注意: 运用方式3的话也要在main.js里加上name属性,如:

image-20220523233618540

7.1编程式导航-跳转传参

image-20220523174959743

image-20220523175055308

注意: 传参时是this.router而不是this.router而不是this.route。

7.2后退$router.back()

image-20220523234653863

8、嵌套和守卫

8.1路由嵌套

image-20220523235008755

image-20220524000303336

注意: 二级路由path如果写了根路径'/',那么to这里直接写成这样即可to="/ranking",就不需要再加/find了。如果二级路由path如果写成'',那么to这里要写成这样to="/find"或to="/find/"

8.2全局前置守卫

什么是路由守卫?

路由在真正跳转前, 会执行的beforeEach函数,这个函数 就是路由守卫 。

image-20220524001248683

image-20220524001258625

to 目的地(去哪个页面), from 来源(从哪个页面来), next 放行回调函数

注意: 放行回调函数一定要写,不然一直不放行,页面就一直不显示。

// router 创建实例之后
// 可以往这个 router 路由实例添加导航守卫(路由守卫)
// 全局前置, 所有页面跳转之前都会经过
router.beforeEach((to, from, next)=>{
  console.log('到达了导航守卫');
  // 拦住了必须放行, 默认这个函数可以接收到三个参数
  // to 目的地, from 来源, next 放行回调函数
  console.log(to);
  console.log(from);
  // 如果你来到了我的音乐但是有没有token就要跳转到登录页
  if (to.path === '/my' && !localStorage.getItem('token')) {
    // 这个 next 可以再里面带上 path 进行跳转
    next('/login')
  }else {
    next()
  }
})

9、样式穿透

image-20220524120859568

10、路由使用案例(重要)

// 配置路由
// 1、引入
import VueRouter from "vue-router"
import Vue from "vue"
// 2、注册两个全局组件,router-link和router-view
Vue.use(VueRouter)

// 3、创建路由规则
// import .. from ... 这种方式引入组件,一次引入了多少个组件,那么就一次性加载多少个组件
const routes = [
    {
        path: "/",
        // 重定向,表示当用户直接访问localhost:8080的时候强制跳转到登录页面。
        redirect: "/login" 
    },
    {
        path: "/login",
        // 按需引入组件,也就是当用户访问到login页面的时候才加载login.vue组件
        component: ()=>import("../views/login.vue") 
        //注意:箭头函数引入vue组件比import .. from ...,component:..引入组件性能好。
    },
    {
        path: "/register",
        component: ()=>import("@/views/register.vue")
    },
    {
        path: "/personal",
        component: ()=>import("@/views/personal.vue")
    }
]
// 4、根据路由规则生成路由对象
const router = new VueRouter({
    // routes: routes  注意:键名routes不能修改,键值routes可以修改,
    // 但是我们一般取一样的名字,方便使用简写。
    routes
})
// 5、导出 路由对象(封装路由时要这一步)
//export default router

new Vue({
  // 6、路由对象注入到vue实例中
    //注意:键名router不能修改,键值router可以修改,
  router,
  render: h => h(App),
}).$mount('#app')

  //7、在App.vue中过载
<template>
  <div>
    <router-view></router-view>
  </div>
</template>

11、poster指令

作用:给视频加上封面。

语法::poster="图片url"

12、indexOf() 方法

作用: 可返回某个指定的字符串值在字符串中首次出现的位置,也可以用在数组上。

语法: stringObject.indexOf(searchvalue,fromindex)

image-20220601181229214

说明:该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。

注意:

image-20220601181248249

13、路由元信息(meta)

image-20220602155817205

route对象里面的属性,值为对象。