自定义指令
自定义指令
需求:当页面加载时,让元素获取焦点(一进页面,输入框就获取焦点)
常规操作:操作dom “dom元素.focus()”
获取dom元素还要用ref 和 $refs
<input ref="inp" type="text">
mounted(){
this.$refs.inp.focus()
}
处在mounted这个钩子时,模板已经渲染完了
全局注册指令
所有组件内均可使用
语法:
Vue.directive('指令名',{
"inserted" (el) {
el.focus()
}
})
inserted:指令的生命周期钩子;指令所绑定的元素被添加到页面时会自动调用
el是指令所绑定的元素
局部注册指令
只能在所在组件内使用
语法:
directives:{
"指令名":{
inserted() {
el.focus()
}
}
}
使用:<input v-指令名 type="text">
指令的值
需求:实现一个color指令 —— 当传入不同颜色的时候,标签的文字颜色也跟着变成对应的颜色
语法:
- v-指令名 = "指令值" (通过等号绑定指令的值)
<div v-color = "color">我是内容</div>
- binging.value 拿指令值
- 通过update钩子,监听指令值的变化,进行dom更新操作 (数据变化,视图自动更新)
directives:{
color:{
inserted (el,binding) {
el.style.color = binding.value
},
update (el,binding) {
el.style.color = binding.value
}
}
}
el:指令所绑定的元素
update:指令值修改时会触发update函数
v-loading 指令封装
场景:在开发过程中,发送请求需要时间,在请求的数据未回来时,页面会处于空白状态;这个时候我们就需要实现一个加载中的效果。
这个加载中的效果,我们通常封装一个v-loading指令来实现
先来介绍一下伪类和伪元素
伪类:已有元素在处于某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的;例如::hover、:focus
伪元素:创建一些不在DOM树中的元素,并为其添加样式;例如:::before
::before 向指定元素之前插入内容
语法:
元素::before{content: "要插入的内容";/* 其他属性 */ }
CSS3 规范中有一部分要求,为了区分伪类和伪元素,伪元素使用两个冒号 (::), 伪类使用一个冒号 (:)