Vue2(三):自定义指令、插槽、路由

目录

1、自定义指令

[1.1 基本语法](#1.1 基本语法)

[1.2 指令的值](#1.2 指令的值)

[1.3 v-loading指令封装](#1.3 v-loading指令封装)

2、插槽

[2.1 默认插槽](#2.1 默认插槽)

[2.2 后备内容(默认值)](#2.2 后备内容(默认值))

[2.3 具名插槽](#2.3 具名插槽)

[2.4 作用域插槽](#2.4 作用域插槽)

3、路由(入门)

[3.1 单页应用程序 SPA](#3.1 单页应用程序 SPA)

路由概念

[3.2 VueRouter的基本使用](#3.2 VueRouter的基本使用)

[VueRouter 使用5+2 步](#VueRouter 使用5+2 步)

4、路由进阶

[4.1 路由模块封装](#4.1 路由模块封装)

[4.2 声明式导航router-link](#4.2 声明式导航router-link)

自定义高亮类名

跳转传参

[4.3 路由重定向](#4.3 路由重定向)

[路由 - 404](#路由 - 404)

[路由 - 模式设置](#路由 - 模式设置)

[4.4 编程式导航](#4.4 编程式导航)

基本跳转

路由传参


1、自定义指令

1.1 基本语法

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

html 复制代码
// App.vue
<template>
  <div id="app">
    <h1>自定义指令</h1>
    <input v-focus ref="inp" type="text">
  </div>
</template>

<script>
export default {
  // mouted(){
  //   this.$refs.inp.focus()
  // }
  // 局部注册
  directives: {
    focus: {
      inserted(el) {
        el.focus()
      }
    }
  }
}
</script>

<style></style>
javascript 复制代码
// 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中引入

javascript 复制代码
import VueRouter from 'vue-router'
  1. 安装注册 Vue.use(Vue插件都需要安装注册)
javascript 复制代码
Vue.use(VueRouter)
  1. 创建路由对象
javascript 复制代码
const router = new VueRouter()
  1. 注入到new Vue实例中,建立关联
javascript 复制代码
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. 语法格式:
javascript 复制代码
    to="/path?参数名=值"
  1. 对应页面组件接收传递过来的值
javascript 复制代码
    $route.query.参数名

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

动态路由传参:

  1. 配置动态路由(path:'/search/:参数')
  1. 配置动态路由
javascript 复制代码
    to="/path?参数名"
  1. 对应页面组件接收传递过来的值
javascript 复制代码
    $route.params.参数名

注意:

4.3 路由重定向

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

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

路由 - 404

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

路由 - 模式设置
4.4 编程式导航
基本跳转

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

  1. path路径跳转(简易方便)
javascript 复制代码
// 简写
this.$router.push('路由路径')

// 非简写
this.$router.push({
    path: '路由路径'
})
  1. name命名路由跳转(适合path路径长的场景)

可以给路径起name

路由传参

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

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

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


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

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

相关推荐
Coder-coco35 分钟前
选题管理|基于springboot + vue毕业设计选题管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
遇到困难睡大觉哈哈40 分钟前
Harmony os 卡片传递消息给应用(message 事件)详细介绍
java·服务器·javascript·harmonyos·鸿蒙
快落的小海疼44 分钟前
全局重复接口取消&重复提示
前端·vue.js
快落的小海疼1 小时前
前端导出页面内容为PDF
前端
周某人姓周1 小时前
XSS(一)概述
前端·安全·xss
半梅芒果干1 小时前
vue3 网站访问页面缓存优化
前端·javascript·缓存
lichong9511 小时前
android 使用 java 编写网络连通性检查
android·java·前端
孟祥_成都1 小时前
公司 React 应用感觉很慢,我把没必要的重复渲染砍掉了 40%!
前端
王大宇_1 小时前
word对比工具从入门到出门
前端·javascript