解决方案:Vuetify 出现#activator={on,attrs}报错,类型“{ isActive: boolean; props: Record; }”上不存在属性“on”

#activator或者v-slot:activator报错,不存在属性“on”或者“attrs”

类型“{ isActive: boolean; props: Record; }”上不存在属性“on”
在这里插入图片描述

问题原因:

在以前的Vuetify中确实v-slot:activator="{ on, attrs }",但在新版中废弃使用了,不能再写v-slot:activator="{ on}"或者v-slot:activator="{ attrs }"了,现在应该写的是v-slot:activator="{ isActive,props }"了。

解决方案:

改为#:activator="{ props }"或者#:activator=“{ isActive,props }”`。

我们来看一下源码,找到VTooltip的源码(目录在下图可以找到)的约17892行如下:
在这里插入图片描述
可以看到在插槽slots中两个属性,一个是default代表匿名插槽的情况(大概),一个是activator,就是我们要找的,activator包括:

        activator?: ((args_0: {
            isActive: boolean;
            props: Record<string, any>;
        }) => vue.VNodeChild) | undefined;
    } | undefined;

isActive表示是否当前插槽被激活(我这么讲可能不太规范,大概就是这个意思),然后props传来的是一个事件,事件里面包括的有很多东西,我打印了一下:
在这里插入图片描述
onBlur:对象失去焦点时发生
onFocus:对象获得焦点时发生
onMouseenter:在鼠标指针移动到元素上时触发
onMouseleave:在鼠标指针移开元素走时触发

示例

比如要写一个tooltip,让鼠标移动到按钮上显示一个提示信息:
在这里插入图片描述
那么正确的写法应当如下:

<v-tooltip text="Tooltip">
  <template v-slot:activator="{ props }">
    <v-btn v-bind="props">Tooltip</v-btn>
  </template>
</v-tooltip>

或者

<v-btn>
      Bottom
      <v-tooltip
        activator="parent"
        location="bottom"
      >Tooltip</v-tooltip>
    </v-btn>

以下代码使用了一个循环,实现多个按钮渲染不同的tooltip提示,且分别触发

<template>
<div v-for="(item, index) in mainitems" class="menu-main">
      <div class="menu-main-item">
        <v-tooltip :text="item.name" location="top">
          <template v-slot:activator="{ isActive, props }">
            <v-btn
              variant="text"
              v-bind="props"
              :icon="item.icon"
              size="small"
              color="red-lighten-2"
              @click="output(isActive)"
            ></v-btn
          ></template>
        </v-tooltip>
      </div>
    </div>
</template>

<script>
// ......
const mainitems = [
  { name: "Add New RSS Feed", icon: "mdi-book-plus" },
  { name: "Export Feeds", icon: "mdi-export-variant" },
  { name: "Import Feeds", icon: "mdi-file-import" },
] as { name: string; icon: string }[];
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中杯可乐多加冰

请我喝杯可乐吧,我会多加冰!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值