外观
自定义指令
- Authors
- Name
- Elone Hoo
- Me
- @elonehoo
在 vue.js 中,我们可以获得一堆内置指令,例如 v-for 和 v-if,但我们也可以构建自己的指令:
vue
<template>
<h1 v-bg-colour="skyblue">这个背景颜色是蓝色的</h1>
</template>
<script>
import { createApp } from 'vue'
const app = createApp({})
app.directive('bg-colour', {
mounted(el,{value}) {
// 更新背景的颜色
el.style.backgroundColor = value
}
})
</script>
(显然,这个简单的指令是荒谬的,因为我们只需使用 CSS)
我们还可以指定单个参数:
vue
<template>
<h1 v-bg-colour:color="'skyblue'">
这个背景颜色是蓝色的
</h1>
</template>
<script>
app.directive('bg-colour', {
mounted(el,{ value, arg }) {
// 更新背景的颜色
el.style.backgroundColor = value
console.log(arg) // colour
}
})
</script>
不幸的是,如果我们想要多个参数,Vue 会将它们视为不同的指令:
vue
<template>
<h1
v-bg-colour:color="'skyblue'"
v-bg-colour:animate="'true'"
>
这个背景颜色是蓝色的
</h1>
</template>
对我们来说,幸运的是,该值被评估为 JavaScript 表达式,因此我们可以传递一个选项对象:
vue
<template>
<h1 v-bg-colour="{
colour: 'skyblue',
animate: true
}">这个背景颜色是蓝色的</h1>
</template>
<script>
import { createApp } from 'vue'
const app = createApp({})
app.directive('bg-colour', {
mounted(el,{value}) {
// 更新背景的颜色
el.style.backgroundColor = value.colour
}
})
</script>
使用自定义指令还有很多其他功能。
有关更多信息,请参阅文档:https://cn.vuejs.org/api/application.html#app-directive