这是我参与「 第五届青训营 」伴学笔记创作活动的第 10 天。
前言
今天是 2023 年 1 月 24 日星期二,农历正月初三。
依然祝大家兔年快乐🐰
今天我还是继续写一些关于 Vue 框架的学习笔记。Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。Vue 只关注视图层,采用自底向上增量开发的设计。Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue3 自定义指令
除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。
下面的实例是注册一个全局指令 v-focus, 该指令的功能是在页面加载时,元素获得焦点:
<div id="app">
<p>页面载入时,input 元素自动获取焦点:</p>
<input v-focus>
</div>
<script>
const app = Vue.createApp({})
// 注册一个全局自定义指令 `v-focus`
app.directive('focus', {
// 当被绑定的元素挂载到 DOM 中时……
mounted(el) {
// 聚焦元素
el.focus()
}
})
app.mount('#app')
</script>
指令定义函数提供了几个可选的钩子函数:
created: 在绑定元素的属性或事件监听器被应用之前调用。beforeMount: 指令第一次绑定到元素并且在挂载父组件之前调用。。mounted: 在绑定元素的父组件被挂载后调用。。beforeUpdate: 在更新包含组件的 VNode 之前调用。。updated: 在包含组件的 VNode 及其子组件的 VNode 更新后调用。beforeUnmount: 当指令与在绑定元素父组件卸载之前时,只调用一次。unmounted: 当指令与元素解除绑定且父组件已卸载时,只调用一次。
钩子函数的参数有:
el
el 指令绑定到的元素。这可用于直接操作 DOM。
binding
binding 是一个对象,包含以下属性:
instance:使用指令的组件实例。value:传递给指令的值。例如,在v-my-directive="1 + 1"中,该值为2。oldValue:先前的值,仅在beforeUpdate和updated中可用。值是否已更改都可用。arg:参数传递给指令 (如果有)。例如在v-my-directive:foo中,arg 为"foo"。modifiers:包含修饰符 (如果有) 的对象。例如在v-my-directive.foo.bar中,修饰符对象为{foo: true,bar: true}。dir:一个对象,在注册指令时作为参数传递。例如,在以下指令中:
app.directive('focus', {
mounted(el) {
el.focus()
}
})
dir 将会是以下对象:
{
mounted(el) {
el.focus()
}
}