vue3笔记
vue3学习之旅–邂逅vue3-了解认识Vue3
vue3学习之旅–邂逅vue3-了解认识Vue3(二)
Vue3学习之旅–爱上Vue3–Vue3基础语法(一)–以及vscode基本使用和快速生成代码片段
Vue3学习之旅–爱上Vue3–Vue3的Options-API
vue3学习之旅–vue的表单和开发模式–组件化开发初识
Vue3学习之旅–初识webpack–webpack打包js,css,less等文件以及兼容性处理
Vue3学习之旅–之webpack基础-进阶–webpack5?拿来吧你!
vue3学习之旅–webpack5-babel整合sfc单文件vue组件
Vue3学习之旅-webpack终章–热部署(更新)–跨域代理?拿来吧你!
vue3学习之旅-Vue-CLI及其原理&尤大大新宠Vite-下一代前端开发构建工具Vite:拿来吧你!
Vue3学习之旅-之vue3组件化(一)—>父子组件通信
Vue3学习之旅–Vue3组件化开发(二)-非父子组件通信及组件插槽–细节太多建议反复观看
Vue3学习之旅-Vue3组件化开发(三)-动态/异步组件-vue3生命周期-组件的v-model
Vue3学习之旅-Vue3过渡&动画实现
Vue3学习之旅–Composition-API-入门篇
Vue3学习之旅–Composition-API-进阶篇
Vue3学习之旅–Composition API–高级篇–render和h函数以及jsx的使用
在Vue的模板语法中我们学习过各种各样的指令:v-show、v-for、v-model等等,除了使用这些指令之外,Vue 也允许我们来自定义自己的指令。
自定义指令分为两种:
比如我们来做一个非常简单的案例:当某个元素挂载完成后可以自定获取焦点
实现方式二:自定义一个 v-focus 的局部指令
注意:参数bindings可以拿到使用该指令的组件或元素上指令的参数和修饰符等信息。后面会说。
自定义一个全局的v-focus指令可以让我们在任何地方直接使用
一个指令定义的对象,Vue提供了如下的几个钩子函数:
如果我们指令需要接受一些参数或者修饰符应该如何操作呢?
在我们的生命周期中,我们可以通过 bindings 获取到对应的内容:
<template>
<div>
<h2>当前计数:{{ counter }}h2>
<button v-mao.aaa.bbb="'字符串毛毛!'" @click="increment">+1button>
div>
template>
<script>
import { ref, watch, onMounted } from 'vue';
export default {
// 局部组件在 directives属性里面定义
directives: {
mao: {
// 指令的生命周期
created(el, bindings, vnode, preVnode) {
console.log('v-mao created ......')
console.log(el, bindings, vnode, preVnode);
console.log("v-mao指令的参数:", bindings.value);
// 通过 bindings的 modifiers 属性获取修饰符, modifiers是一个对象,修饰符是该对象的属性
// 只要用了这个修饰符,值就是 true
console.log("v-mao指令的修饰符:", bindings.modifiers);
},
beforeMount() {
console.log('v-mao beforeMount ......');
},
mounted() {
console.log('v-mao mounted ......');
},
// 只要指令所在的元素或组件发生了改变,包括属性等发生改变,都会调用这两个生命周期
beforeUpdate() {
console.log('v-mao beforeUpdate ......');
},
updated() {
console.log('v-mao updated ......');
},
beforeUnmount() {
console.log('v-mao beforeUnmount ......');
},
unmounted() {
console.log('v-mao unmounted ......');
},
}
},
setup() {
const counter = ref(0);
const increment = () => counter.value++
return {
counter, increment
}
}
}
script>
<style scoped>
style>
自定义指令案例:时间戳的显示需求:
我们来实现一个可以自动对时间格式化的指令v-format-time:
这里我封装了一个函数,在首页中我们只需要调用这个函数并且传入app即可;
在组件化开发中,我们封装一个组件A,在另外一个组件B中使用:
但是某些情况下,我们希望组件不是挂载在这个组件树上的,可能是移动到Vue app之外的其他位置:
Teleport是什么呢?
它是一个Vue提供的内置组件,类似于react的Portals;
teleport翻译过来是心灵传输、远距离运输的意思;
它有两个属性:
当然,teleport也可以和组件结合一起来使用:
我们可以在 teleport 中使用组件,并且也可以给他传入一些数据;
如果我们将多个teleport应用到同一个目标上(to的值相同),那么这些目标会进行合并:
通常我们向Vue全局添加一些功能时,会采用插件的模式,它有两种编写方式:
插件可以完成的功能没有限制,比如下面的几种都是可以的: