Skip to content

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

Open
Open
@webfanzc

Description

@webfanzc
<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, { value }) {
    const [style, condition] = value
    watchEffect(() => {
      if (condition?.()) {
        Object.entries(style).forEach(([key, value])=> {
          el.style[key] = value
        })
      } else {
        Object.keys(style).forEach(key => {
          el.style[key] = ''
        })
      }
    })
  },
};

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