vue自定义指令实现切换

1.html

<div class="panel" v-SelectItem="{className:'panel-model',activeClass:'active-model',currentIndex:SelectIndex}">
	<div class="panel-model"  v-for="(item,index) in State" :key="index" @click="SelectIndexFun(index)">
		<span>{{item.ModelName}}</span>
   	</div>
</div>

2.全局自定义指令注册(需要在main.js文件定义)

const app =createApp(App)
//全局调用自定义指令()
app.directive('SelectItem', {
    // 指令绑定元素挂载前
    beforeMount(el) {},
    // 指令绑定元素挂载后
    mounted(el, binding) {
        let options = binding.value
        let {className,activeClass,currentIndex} = options
        let children = el.getElementsByClassName(className)
        children[currentIndex].className+=` ${activeClass}`
    },
    // 指令绑定元素因为数据修改触发修改前
    beforeUpdate(el) {},
    // 指令绑定元素因为数据修改触发修改后
    updated(el,binding) {
        let options = binding.value
        let oldoptions = binding.oldValue
        let {className,activeClass,currentIndex} = options
        let children = el.getElementsByClassName(className)
        let {currentIndex:oldcurrentindex}=oldoptions
        children[currentIndex].className+=` ${activeClass}`
        children[oldcurrentindex].className+=className
    },
    // 指令绑定元素销毁前
    beforeUnmount(el) {},
    // 指令绑定元素销毁后
    unmounted(el) {},
});

3.局部自定义指令注册

directives: {
    SelectItem: {
      mounted(el, binding) {
        let options = binding.value;
        let { className, activeClass, currentIndex } = options;
        let children = el.getElementsByClassName(className);
        children[currentIndex].className += ` ${activeClass}`;
      },
      updated(el, binding) {
        let options = binding.value;
        let oldoptions = binding.oldValue;
        let { className, activeClass, currentIndex } = options;
        let children = el.getElementsByClassName(className);
        let { currentIndex: oldcurrentindex } = oldoptions;
        children[currentIndex].className += ` ${activeClass}`;
        children[oldcurrentindex].className += className;
      },
    },
  },

4.数据

  setup(){
    let SelectIndex=ref(0)
    let SelectIndexFun=(index)=>{
      SelectIndex.value = index
    }
    let State=reactive([
      {ModelName:"选项一"},
      {ModelName:"选项二"},
      {ModelName:"选项三"},
      {ModelName:"选项四"},
      {ModelName:"选项五"},
    ])
    return{
      State,
      SelectIndex,
      SelectIndexFun
    }
  }

4.实现
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值