两周掌握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.hqwc.cn/news/410361.html

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

相关文章

怎样制作一本旅游电子相册呢?

​随着数码技术的发展&#xff0c;旅游电子相册已成为越来越多旅游爱好者的必备工具。它不仅能让您随时随地欣赏自己的旅行回忆&#xff0c;还能分享给亲朋好友&#xff0c;甚至上传到社交媒体上&#xff0c;让更多人了解您的旅行故事。那么&#xff0c;如何制作一本精美的旅游…

什么是防火墙?

目录 什么是防火墙&#xff0c;为什么需要防火墙&#xff1f;防火墙与交换机、路由器对比防火墙和路由器实现安全控制的区别防火墙的发展史1989年至1994年1995年至2004年2005年至今 什么是防火墙&#xff0c;为什么需要防火墙&#xff1f; “防火墙”一词起源于建筑领域&#x…

07. 面向对象编程(一)

目录 1、前言 2、类和对象 2.1、定义类 2.2、定义方法 2.3、创建对象 2.4、访问控制 2.4.1、公共变量 2.4.2、私有变量 2.4.3、保护成员 2.4.4、总结 3、封装 4、继承 5、多态 6、小结 1、前言 在Python中&#xff0c;面向对象编程&#xff08;Object-Oriented …

蓝桥杯基础数据结构(java版)

引言 数据结构数据结构。所以数据结构是一个抽象的概念。其目的是为了更好的组织数据方便数据存储。下面我们来看一些简单的数据储存方式 输入和输出 这里先介绍java的输入和输出。简单引入&#xff0c;不过多详细介绍&#xff0c;等我单一写一篇的时候这里会挂上链接 简单的…

133基于matlab的智能微电网粒子群优化算法

基于matlab的智能微电网粒子群优化算法&#xff0c;输出微型燃气轮机、电网输入微网运行计划、储能运行计算。程序已调通&#xff0c;可直接运行。 133智能微电网粒子群优化算法 (xiaohongshu.com)

【Nuxt3】Nuxt3脚手架nuxi安装项目和项目目录介绍

简言 最近学了Nuxt3,并使用它创建了自己的小网站。记录下学习到的nuxt3内容。 Nuxt3官网 Nuxt 是一个免费的开源框架&#xff0c;可通过直观、可扩展的方式使用 Vue.js 创建类型安全、高性能、生产级的全栈 Web 应用程序和网站。 支持SSR、SPA、建立静态网站&#xff0c;也可以…

软件测试|Selenium StaleElementReferenceException 异常分析与解决

简介 Selenium 是一个流行的自动化测试工具&#xff0c;用于模拟用户与网页交互。然而&#xff0c;当我们在使用 Selenium 时&#xff0c;可能会遇到一个常见的异常&#xff0c;即 StaleElementReferenceException。这个异常通常在我们尝试与网页上的元素交互时抛出&#xff0…

easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏

1&#xff1a;效果示例 2&#xff1a;代码示例&#xff1a; UnLockCell.java package com.example.juc.zhujie;/*** Author * Date Created in 2023/12/19 10:09* DESCRIPTION:* Version V1.0*/import java.lang.annotation.*;/*** 用于标记锁定哪些列不需要锁定* author 12…

P2257 YY的GCD(莫比乌斯)

题目描述 神犇 YY 虐完数论后给傻 kAc 出了一题 给定 N,M&#xff0c;求 1≤x≤N&#xff0c;1≤y≤M 且 gcd(x,y) 为质数的(x,y) 有多少对。 输入格式 第一行一个整数 T 表述数据组数。 接下来 T 行&#xff0c;每行两个正整数&#xff0c;N,M。 输出格式 T 行&#xf…

Angular系列教程之zone.js和NgZone

文章目录 什么是zone.jsZone的工作原理Zone的常见用途NgZone&#xff1a;Angular中的zone.js使用NgZone使用NgZone执行代码使用NgZone外部检测 结论 什么是zone.js 在Angular中&#xff0c;zone.js是一个非常重要的库&#xff0c;它为我们提供了一种跟踪和管理异步操作的机制。…

数据结构学习笔记——查找算法中的树形查找(红黑树)

目录 一、红黑树的定义&#xff08;一&#xff09;黑/红结点、叶子节点&#xff08;二&#xff09;黑色完美平衡 二、红黑树的性质&#xff08;一&#xff09;黑高和高度&#xff08;二&#xff09;叶子结点个数 三、红黑树与AVL对比 一、红黑树的定义 红黑树是一棵二叉排序树…

UML-类图和类图转化为代码

提示&#xff1a;文章详细的讲解了类图的四种关系&#xff0c;以及每种关系如何转化为对应的代码。 UML-类图和类图转化为代码 一、类于类之间的关系1.依赖关系2.关联关系(1) 单向关联(2) 双向关联(3) 自关联(4) 聚合关联(has-a)(5) 组合关联&#xff08;contains-a&#xff09…