vue自定义指令
自定义一个TabBar组件:
<template> <div class="tab-bar"> <div v-for="(item,index) in tabList" :key="index" :class="['common',{active:currentIndex===index}]" @click="currentIndex=index">{{item}}</div> </div> </template> <script> export default { data() { return { tabList: ['项目一', '项目二', '项目三'], currentIndex: 0 } } } </script> <style lang='less' scoped> .tab-bar { display: flex; .common { width: 100px; line-height: 36px; text-align: center; border: 1px solid #000; cursor: pointer; } .active { background-color: red; } } </style>
通过动态绑定类名(active)实现点击高亮。
封装成指令:
1、src/directives/navActive.js:
export default { bind: (el, binding) => { // 设置初始化高亮类名 const { className, activeClass, currentIndex } = binding.value const children = el.getElementsByClassName(className) children[currentIndex].className += ` ${activeClass}` }, update: (el, binding) => { // 设置被点击tab的高亮类名,并清除之前的tab的高亮类名 const { className, activeClass, currentIndex } = binding.value const children = el.getElementsByClassName(className) children[currentIndex].className += ` ${activeClass}` const { currentIndex: oldIndex } = binding.oldValue children[oldIndex].className = className } }
2、使用
引入指令并注册指令:
import NavActive from '@/directives/navActive'
directives: { NavActive }
使用指令,并传入对应的参数给指令:(class只需要写common就行了)
<div class="tab-bar" v-NavActive="{className:'common',activeClass:'active',currentIndex}"> <div v-for="(item,index) in tabList" :key="index" class='common' @click="currentIndex=index">{{item}}</div> </div>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
2020-08-06 scoped的规则