Skip to content

24 - 激活的样式-指令 #1642

Open
Open
@a993897020

Description

@a993897020
// 你的答案
<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>

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions