Open
Description
// 你的答案
<script setup lang='ts'>
import { ref,watchEffect } from "vue"
/**
* Implement the custom directive
* Make sure the list item text color changes to red when the `toggleTab` is toggled
*
*/
const VActiveStyle = {
mounted:(el,binding)=>{
el.addEventListener('click',()=>{
const [styles,isActive]=binding.value
function setStyle(curDom,allStyle,isReset){
Object.keys(allStyle).forEach(p=>{
if(curDom.style.hasOwnProperty(p)){
curDom.style[p]=isReset?'':styles[p]
}
})
}
watchEffect(()=>{
if(isActive()){
setStyle(el,styles,false)
}else{
setStyle(el,styles,true)
}
})
})
}
}
const list = [1, 2, 3, 4, 5, 6, 7, 8]
const activeTab = ref(0)
function toggleTab(index: number) {
activeTab.value = index
}
</script>
<template>
<ul>
<li
v-for="(item,index) in list"
:key="index"
v-active-style="[{'color':'red'},() => activeTab === index]"
@click="toggleTab(index)"
>
{{ item }}
</li>
</ul>
</template>