失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > vue3用自定义的形式写一个点击谁谁改变背景色

vue3用自定义的形式写一个点击谁谁改变背景色

时间:2019-09-08 17:23:37

相关推荐

vue3用自定义的形式写一个点击谁谁改变背景色

尝试用自定义指令实现以下方法

一. 首先显示模板

<template><div class="navBar" ><div @click="changeIndex(index)" v-for="(item, index) in list" :class="['item']">{{ item }}</div></div></template><script setup>import { reactive, toRefs, toRef } from "vue";let state = reactive({curIndex: 0,list: ['选项1', '选项2', '选项3', '选项4']})let { list } = toRefs(state)let curIndex = toRef(state, 'curIndex')let changeIndex = (index) => {//点击改变当前下标curIndex.value = index}</script><style>.navBar {margin: 0 auto;width: 400px;height: 100px;display: flex;}.item {width: 100px;border: 1px solid red;line-height: 100px;text-align: center;}.active {background-color: pink;}</style>

二.用插件的形式准备注册一个自定义指令

参考文档:插件 | Vue.js

他会执行install方式,把app实例传进来,这时候可以在app上挂载一些实例了,这时候顺便在main.js中注册先

三.注册一个全局自定义指令

参考文档:自定义指令 | Vue.js

export default {install(app) {app.directive('clickAndAddClass', {})}}

添加上代码

export default {install(app) {app.directive('clickAndAddClass', {mounted(el, binding) {//拿到自定义指令传过来的配置项const option = binding.value//拿到childconst child = el.getElementsByClassName(option.className)//点击谁,就把最新的下标传进来,并且添加上active类名child[option.curIndex].className += ` ${option.avtiveClass}`},// 在绑定元素的父组件// 及他自己的所有子节点都更新后调用updated(el, binding) {const option = binding.value//获取旧的配置项const oldOption = binding.oldValueconst child = el.getElementsByClassName(option.className)//把上一个item的类名还原child[oldOption.curIndex].className = oldOption.className//再把新的item添加上active,记得别忘了不加空格child[option.curIndex].className += ` ${option.avtiveClass}`},})}}

四.传入自定义指令的配置项

<template><div class="navBar" v-clickAndAddClass="{curIndex,avtiveClass: 'active',className: 'item' }"><div @click="changeIndex(index)" v-for="(item, index) in list" :class="['item']">{{ item }}</div></div></template>

搞定

如果觉得《vue3用自定义的形式写一个点击谁谁改变背景色》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。