Vue2(三):自定义指令、插槽、路由、组件缓存 - 详解

目录

1、自定义指令

1.1 基本语法

1.2 指令的值

1.3 v-loading指令封装

2、插槽

2.1 默认插槽

2.2 后备内容(默认值)

2.3 具名插槽

2.4 作用域插槽

3、路由(入门)

3.1 单页应用程序 SPA

路由概念

3.2 VueRouter的基本使用

VueRouter 使用5+2 步

4、路由进阶

4.1 路由模块封装

自定义高亮类名

跳转传参

4.3 路由重定向

路由 - 404

路由 - 模式设置

4.4 编程式导航

基本跳转      

路由传参

5、嵌套二级路由

6、组件缓存


1、自定义指令

1.1 基本语法

inserted指的是:当指令所绑定的元素被添加到页面中时,会自动调用。0

// App.vue

<script>
export default {
  // mouted(){
  //   this.$refs.inp.focus()
  // }
  // 局部注册
  directives: {
    focus: {
      inserted(el) {
        el.focus()
      }
    }
  }
}
</script>
// main.js
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
// 全局注册
// Vue.directive('focus', {
//   inserted(el) {
//     el.focus()
//   }
// })
new Vue({
  render: h => h(App),
}).$mount('#app')
1.2 指令的值

指令是可以传值的。手动修改color时,会触发update函数。

inserted 提供的是元素被添加到页面中时的逻辑;update 钩子是指令的值修改的时候触发,提供值变化后,dom更新的逻辑。

1.3 v-loading指令封装

本质loading效果就是一个蒙层,盖在了盒子上

2、插槽

        插槽分类:默认插槽(组件内定制一处结构)和具名插槽(组件内定制多处结构)。

        作用域插槽是插槽的一个传参语法。

2.1 默认插槽

作用:让组件内部的一些结构支持自定义。

组件封装时,需要定制的内容使用 slot 占位,使用该组件时定制的内容会被填在slot的位置。

2.2 后备内容(默认值)

        封装组件时,可以为预留的 '<slot>'插槽提供的后备内容 

2.3 具名插槽

一个组件内有多处结构,需要外部传入标签,进行定制。使用多个slot占位,使用name属性区分。

v-slot:插槽名 可以简化成 #插槽名

2.4 作用域插槽

        定义slot插槽的同时,是可以传值的。给插槽上可以绑定数据,将来使用组件时可以用。

3、路由(入门)

3.1 单页应用程序 SPA

SEO:搜索引擎优化

        单页面应用程序,开发效率高、性能高、用户体验好,是因为:页面按需更新(要明确访问路径和组件的对应关系 --- 由路由确定)。

路由概念

Vue中路由:路径组件的映射关系

根据路由就可以知道不同路径的,应该匹配渲染哪个组件

3.2 VueRouter的基本使用

        作用:修改地址栏路径时,切换显示匹配的组件

VueRouter 使用5+2 步

1. 下载VueRouter 模块到当前工程,版本3.6.5:npm install vue-router@3.6.5 --save

2. 在main.js中引入 

import VueRouter from 'vue-router'

3. 安装注册 Vue.use(Vue插件都需要安装注册)

Vue.use(VueRouter)

4. 创建路由对象

const router = new VueRouter()

5. 注入到new Vue实例中,建立关联

new Vue({
  render: h => h(App),
  router: router
}).$mount('#app')

2个核心步骤:

1. 创建需要的组件(views目录),配置路由规则(路径和组件的对应规则)

2.配置导航,配置路由出口(路径匹配的组件显示的位置router-view,路径要和上面地址栏路径一致)

        组件分为:页面组件(在views中,配合路由使用)和复用组件(在components中)(本质无区别)

4、路由进阶

4.1 路由模块封装

路径可以使用绝对路径,使用@

vue-router提供一个全局组件router-link(取代a标签)

当点击router-link的标签自带激活时的类名router-link-activerouter-link-exact-active

自定义高亮类名

跳转传参

两种方式:查询参数传参(适合传多个参数)和动态路由传参。

查询参数传参:

        1. 语法格式:

    to="/path?参数名=值"

        2. 对应页面组件接收传递过来的值

    $route.query.参数名

        在created中,获取路由:this.$route.query.参数名

动态路由传参:

        1. 配置动态路由(path:'/search/:参数')

        2. 配置动态路由

    to="/path?参数名"

        3. 对应页面组件接收传递过来的值

    $route.params.参数名

注意:

4.3 路由重定向

        当我们打开网页时,url默认是/路径,未匹配到组件时,会出现空白,此时就需要重定向,匹配到某个路径后,强制跳转到path路径

语法:{path: 匹配路径,redirect: 重定向到的路径},

路由 - 404

404处理,必须放在routes最后面

路由 - 模式设置

4.4 编程式导航
基本跳转      

 --- 用 js 代码来进行跳转

1. path路径跳转(简易方便)

// 简写
this.$router.push('路由路径')
// 非简写
this.$router.push({
    path: '路由路径'
})

2. name命名路由跳转(适合path路径长的场景)

可以给路径起name

路由传参

两种传参方式:查询参数 + 动态路由传参

path路径跳转传参(query传参)

path路径跳转传参(动态路由传参)

name命名路由跳转传参(query传参)

name命名路由跳转传参(动态路由传参)

5、嵌套二级路由

1. children配置项,可以配置嵌套子路由

2. 在二级路由的父组件(Layout)中准备二级路由出口:router-view

6、组件缓存

        当我们从一个页面点击后跳转到一个页面后,再点击返回,数据重新加载,回到顶部,而不是我们原本的页面的位置

        原因:路由跳转后,组件被销毁了,返回回来的组件又被重建了,所以数据重新加载了。

        被缓存的组件会多两个生命周期钩子:actived(激活时/组件被看见时)和deactived(失活时)。

posted on 2026-02-03 17:59  ljbguanli  阅读(2)  评论(0)    收藏  举报