两周掌握Vue3(五):自定义指令、路由、ajax

文章目录

  • 一、自定义指令
    • 1.创建和使用自定义指令
    • 2.钩子函数
    • 3.使用参数
  • 二、路由
    • 1.创建一个router实例
    • 2.在components目录中创建组件
    • 3.将路由实例挂载到应用
    • 4.使用路由
  • 三、Ajax

代码仓库:跳转
当前分支:05

一、自定义指令

自定义指令是Vue.js框架提供的一个非常强大的特性,它允许开发者直接操作DOM,扩展Vue.js的能力。自定义指令的主要作用包括:

  1. 封装常用操作:当你发现在多个组件中需要重复执行相同的DOM操作时,可以将这些操作封装成一个自定义指令,以提高代码的复用性和可维护性。

  2. 与第三方库集成:有时候你可能需要与第三方库(如图表库、地图库等)进行集成,自定义指令可以帮助你在Vue组件中使用这些库,并提供统一的接口。

  3. 访问底层DOM:有些特定的DOM操作可能需要直接访问底层的DOM元素,而不适合放在组件的模板中,自定义指令可以提供一个更灵活的方式来处理这些操作。

  4. 解耦视图层和业务逻辑:有些操作可能更适合放在指令中而不是组件中,这样可以更好地将视图层和业务逻辑解耦,使代码更清晰易懂。

总的来说,自定义指令为开发者提供了一种扩展Vue.js功能的方式,使得在处理DOM操作和与第三方库集成时更加灵活和便捷。

1.创建和使用自定义指令

我们可以在任何Vue文件中创建自定义指令。在这个例子中,我们将创建一个简单的自定义指令,用于将元素的背景颜色设置为红色。

main.js:

// main.js
import { createApp } from 'vue';
import App from './App.vue';const app = createApp(App);app.directive('red-color', {mounted(el) {el.style.backgroundColor = 'red';}
});app.mount('#app');
  1. 在组件中使用自定义指令

App.vue:

<template><div v-red-color>这个div的背景颜色会变成红色</div>
</template><script>
export default {name: 'App'
}
</script>
  • 效果:

在这里插入图片描述

2.钩子函数

  • 指令定义函数提供了几个钩子函数:

    created : 在绑定元素的属性或事件监听器被应用之前调用。
    beforeMount:在被绑定元素挂载之前调用。
    mounted:在被绑定元素挂载后调用。
    beforeUpdate:在包含组件的 VNode 更新之前调用,但可能在其子 VNode 更新之前调用。
    updated:在包含组件的 VNode 及其子组件的 VNode 更新后调用。
    beforeUnmount:在卸载绑定元素之前调用。
    unmounted:在卸载绑定元素后调用。

这些钩子函数允许在自定义指令的生命周期中执行相应的操作,例如在元素挂载前后进行初始化和清理、在元素更新前后执行特定逻辑、在解绑时进行清理等。通过合理使用这些钩子函数,可以更好地控制自定义指令的行为,并与Vue 3的生命周期进行交互。

  • 参数: 在Vue 3中,自定义指令的钩子函数可以接收以下参数:
    el:指令所绑定的元素,可以用来直接操作DOM。
    binding:一个对象,包含指令的信息。包括name、value、oldValue、arg、modifiers等属性。
    vnode:Vue 编译生成的虚拟节点。
    prevVNode:上一个虚拟节点,仅在 beforeUpdate 和 updated 钩子中可用。

3.使用参数

假设我们要创建一个自定义指令,当鼠标悬停在元素上时,元素的背景颜色会变成红色,当鼠标移出时,背景颜色会恢复。我们将使用自定义指令的钩子函数来实现这个功能。

  • main.js
import { createApp } from 'vue'
import App from './App.vue'const app = createApp(App)app.directive('hover-color', {beforeMount(el, binding) {el.style.transition = 'background-color 0.3s';el.style.backgroundColor = binding.value;},mounted(el, binding) {el.addEventListener('mouseenter', () => {el.style.backgroundColor = 'red';});el.addEventListener('mouseleave', () => {el.style.backgroundColor = binding.value;});}
});app.mount('#app')
  • App.vue:
<template><div v-hover-color="'lightblue'" style="width: 200px; height: 200px;">鼠标悬停我看看背景色会变成什么颜色</div>
</template><script>
export default {name: 'App'
}
</script>
  • 效果:

在这里插入图片描述

鼠标悬停:

在这里插入图片描述

二、路由

要想在vue中使用路由,第一步需要安装react-router:

npm install vue-router

1.创建一个router实例

router.js

import { createRouter, createWebHistory } from 'vue-router';
import MyHome from './components/MyHome.vue';
import MyAbout from './components/MyAbout.vue';const routes = [{ path: '/', component: MyHome },{ path: '/about', component: MyAbout }
];const router = createRouter({history: createWebHistory(),routes
});export default router;

2.在components目录中创建组件

MyHome.vue

<template><div class="home"><h1>{{ msg }}</h1></div>
</template><script>
export default {name: 'MyHome',data() {return {msg: 'Home'};}
};
</script>

MyAbout.vue

<!-- components/HelloWorld.vue -->
<template><div class="about"><h1>{{ msg }}</h1></div>
</template><script>
export default {name: 'MyAbout',data() {return {msg: 'About'};}
};
</script>

3.将路由实例挂载到应用

main.js

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';const app = createApp(App);
app.use(router);
app.mount('#app');

4.使用路由

App.vue

<template><div><router-link to="/">Home</router-link><router-link to="/about">About</router-link><router-view></router-view></div>
</template><script>
export default {name: 'App'
}
</script>
  • 效果:

在这里插入图片描述

三、Ajax

Ajax(Asynchronous JavaScript and XML)是一种用于创建交互式网页应用的技术。它通过在不重新加载整个页面的情况下,利用 JavaScript 发起 HTTP 请求并接收服务器返回的数据,从而实现页面的局部刷新和动态更新。

Ajax 技术的核心是通过 XMLHttpRequest 对象来实现异步通信。通过使用 Ajax,网页可以在后台与服务器进行数据交换,从而实现动态更新页面内容的功能。这种技术使得用户能够在不刷新整个页面的情况下,获取最新的数据并更新页面的部分内容,从而提升了用户体验。

Ajax 技术通常用于实现以下功能:

  1. 动态加载数据:例如在网页中实现无刷新加载新内容。
  2. 表单验证:通过 Ajax 可以在用户输入数据后实时验证数据的有效性。
  3. 实时搜索:在用户输入搜索关键词时,实时向服务器请求数据并展示搜索结果。

总的来说,Ajax 技术是一种利用 JavaScript 和 XMLHttpRequest 对象来实现异步通信的技术,它使得网页能够实现动态更新内容的功能,提升了用户体验。

  • 首先,安装依赖:
npm install axios
  • 代码示例:
// 发起GET请求
axios.get('https://api.example.com/data').then(response => {console.log(response.data);}).catch(error => {console.error(error);});// 发起POST请求
axios.post('https://api.example.com/postData', { data: 'example' }).then(response => {console.log(response.data);}).catch(error => {console.error(error);});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/625330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘返利机器人的工作原理与实现思路

揭秘返利机器人的工作原理与实现思路 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我将为你揭示返利机器人的工作原理与实现思路&#xff0c;让你…

基于Springboot的善筹网(众筹网-有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的善筹网(众筹网-有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring S…

人生当努力

"认定一个目标,便专心致志地向那里走,其余一切都置之度外,这是成功的秘诀,也是免除烦恼的秘诀"—朱光潜 最近有和亲友讨论是否要和别人比,是否要赢的问题.我觉得需要.软弱,实力弱的人才不去比较.如果不和别人比,你如何知自己差在哪儿?连差距都不知,又如何进步.不是…

Vue入门七(Vuex的使用|Vue-router|LocalStorage与SessionStorage和cookie的使用)

文章目录 一、Vuex1&#xff09;理解vuex2&#xff09;优点3&#xff09;何时使用&#xff1f;4&#xff09;使用步骤① 安装vuex② 注册vuex③ 引用vuex④ 创建仓库Store五个模块介绍 5&#xff09;基本使用 二、Vue-router三、LocalStorage与SessionStorage、cookie的使用 一…

ChatGPT Plus 经验分享:是否值得花钱升级?

ChatGPT Plus 经验分享&#xff1a;是否值得花钱升级&#xff1f; 五星上将麦克阿瑟曾经说过&#xff1a;“在有钱与没钱面前&#xff0c;我选择了or” ChatGPT 的每月订阅方案- ChatGPT Plus 已经推出一段时间了&#xff0c;目前的费用是$20 USD / 月(约TWD 610 / 月)。 Open…

Spirng MVC见解1

1. SpringMVC概述 1.1 MVC介绍 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#x…

mybatis基本注解、增删改查、结果集映射、一对一、一对多

mybatis注解 基本注解新增删除修改查询 结果映射注解Results结果映射一对一映射一对多映射 基本注解 新增 功能&#xff1a;Insert完成新增操作&#xff0c;类似配置文件的 元素&#xff1b; 说明&#xff1a;新增时所用的参数取值是接口方法的入参&#xff0c;可以是对象&a…

Linux入门级常用命令学习笔记

以下命令是我跟着编程界的大佬鱼皮学习Linux时用的命令&#xff0c;我把它都记下来&#xff0c;权当作笔记&#xff0c;可供自己后期反复练习使用&#xff0c;让我们学习一下最基本的Linux命令吧。 一、Linux实战命令 在dos下 【ssh 服务器ip】可以连接服务器&#xff0c;输入…

运筹说 第80期 | 最小费用最大流问题

前面我们学习了图与网络分析的基础知识及经典问题&#xff0c;大家是否已经学会了呢&#xff1f;接下来小编和大家学习最后一个经典问题——最小费用最大流问题。 最小费用最大流问题是经济学和管理学中的一类典型问题。在一个网络中每段路径都有“容量”和“费用”两个限制的…

Gorm 0值不更新的问题

我有一张用户表&#xff0c;用户表里面的一个字段叫做points 积分&#xff0c;表示用户当前的剩余积分数据的。每当使用积分兑换物品&#xff0c;积分就会减少。 // 用户表 type User struct {BaseModelAccount string json:"account" form:"account"…

MOS管驱动电流计算以及分立器件驱动电路

自记&#xff1a; 1.先根据mos数据手册查找参数&#xff0c;计算电流&#xff1b; 2.分立器件驱动电路图&#xff1b; 3.分立器件选择 仔细学&#xff0c;能看懂&#xff01; 1.计算电流&#xff1a; 2.分立器件驱动电流&#xff1a;两种&#xff0c;第一种反向&#xff0c…

什么是TestNG以及如何创建testng.xml文件?

目录 什么是TestNG&#xff1f; 如何创建testng.xml文件 手动创建testng.xml 通过testng.xml运行整个包 通过testng.xml运行类 使用Eclipse创建testng.xml 本文将讨论TestNG以及如何通过执行testng.xml文件在TestNG中运行第一个测试用例。 什么是TestNG&#xff1f; Te…

new/delete vs malloc/free

new是关键字&#xff0c;最后还是调用malloc->brk malloc是函数&#xff0c;调用brk() new 和 malloc 都是用于在程序运行时动态分配内存的方法&#xff0c;但它们有一些重要的区别&#xff1a; 语法&#xff1a; new 是C关键字&#xff0c;用于在堆上分配内存并同时调用对…

线性表小结

线性表小结 单链表、循环链表和双向链表的时间效率比较 顺序表和链表的比较

强化学习11——DQN算法

DQN算法的全称为&#xff0c;Deep Q-Network&#xff0c;即在Q-learning算法的基础上引用深度神经网络来近似动作函数 Q ( s , a ) Q(s,a) Q(s,a) 。对于传统的Q-learning&#xff0c;当状态或动作数量特别大的时候&#xff0c;如处理一张图片&#xff0c;假设为 210 160 3 …

5、电科院FTU检测标准学习笔记-功能检测3-参数配置

———————————————————————————————————— 作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 —————————————————…

C++ 树与图的广度优先遍历 || 模版题 :图中点的层次

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环。 所有边的长度都是 1 &#xff0c;点的编号为 1∼n 。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果从 1 号点无法走到 n 号点&#xff0c;输出 −1 。 输入格式 第一行包含两个整数 n 和 m 。 …

Datawhale 大模型基础理论 Day1 引言

开源链接如下&#xff1a;https://github.com/datawhalechina/so-large-lm/blob/main/docs/content/ch01.md 语言模型的概念&#xff1a;即能够赋予每个有意义的词&#xff08;token&#xff09;以一定的概率的一个函数的集合。 语言模型可以被用来评估输入的质量&#xff0c…

加密经济学:Web3时代的新经济模型

随着Web3技术的迅猛发展&#xff0c;我们正迈入一个全新的数字经济时代。加密经济学作为这一时代的核心&#xff0c;不仅在数字货币领域崭露头角&#xff0c;更是重新定义了传统经济模型&#xff0c;为我们开启了一个充满创新和机遇的新纪元。 1. 去中心化的经济体系 Web3时代…

7.3 CONSTANT MEMORY AND CACHING

掩模数组M在卷积中的使用方式有三个有趣的属性。首先&#xff0c;M阵列的大小通常很小。大多数卷积掩模在每个维度上都少于10个元素。即使在3D卷积的情况下&#xff0c;掩码通常也只包含少于1000个元素。其次&#xff0c;在内核执行过程中&#xff0c;M的内容不会改变。第三&am…