由于需要全栈开发一个售票系统项目,时隔一年后重新捡回了我的前端技术~

开发习惯是边看文档边做,然后再vuetify这个MD设计的UI元件库翻来翻去,再涉及到元件交互的时候有几段代码不是很能理解

      <template v-slot:activator="{ on, attrs }">
<v-btn
color="red lighten-2"
dark
v-bind="attrs"
v-on="on"
>
Click Me
</v-btn>
</template>

首先需要明白&attrs的用法,查了一下官方文档:

vm.$attrs

  • 类型:{ [key: string]: string }

  • 只读

  • 详细:

    包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute 绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。

我基本理解成$attrs 可以收集父组件中的所有传过来的属性除了那些在组件中没有通过 props 定义的。就是将父类中的很多属性和方法传递给内部组件,方便执行一些命令。

v-slot是插槽的意思,v-slot:activator,意思是slot="activator",是新的写法。

作用域插槽

一般在父组件中引入了子组件,然后又在子组件中插入了插槽,如果插槽中引入了属性,例如:

//父组件中
<current-user>
{{ user.firstName }}
</current-user>

此时的user属性只能引入的是父组件中的user属性,而不是子组件

这是vue的一个规则:父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的

那么,如何在父组件中引用子组件的数据呢?

这就需要使用到作用域插槽

在子组件childCpn中:

<slot v-bind:user="user">
默认文字
</slot>

在父组件中:

<childCpn>
<template v-slot:default="slotProps">
{{ slotProps.user}}
</template>
</childCpn>

这样使用插槽时,就可以在父组件中直接使用了子组件的属性

所以回到一开始的问题,代码可以写成如下形式:

<v-menu>
<template v-slot:activator="slotProps">
<v-btn v-bind="slotProps.attrs" v-on="slotProps.on">按钮</v-btn>
</template>
</v-menu>

通过获取到了子组件的属性,然后就可以在父组件中直接使用了

另外,作用域插槽的内部工作原理是将你的插槽内容包括在一个传入单个参数的函数里:

function (slotProps) {
// 插槽内容
}

这意味着 v-slot 的值实际上可以是任何能够作为函数定义中的参数的 JavaScript 表达式。所以在支持的环境下(比如支持ES6的浏览器),也可以使用 ES6 解构来传入具体的插槽 prop,如下:

<v-menu>
<template v-slot:activator="{ on, attrs }">
<v-btn v-bind="attrs" v-on="on">按钮</v-btn>
</template>
</v-menu>

这样的写法更加简洁明了

(关于解构语法不懂的可以去百度一下了解学习)

部分转载自https://blog.csdn.net/weixin_44710964/article/details/107428727

vue.js+vuetify学习开发排坑:一个古怪的代码 v-slot:activator="{ on, attrs }"的更多相关文章

  1. 创建Vue.js对象:我的第一个Vue.js输出信息

    <!DOCTYPE html><html><head><meta charset=”utf-8″><title>Vue第一条信息</t ...

  2. Vue.js实战学习笔记(中)

    1.递归组件给组件设置name属性,组件就可以在它的模板内调用自己,但必须给一个条件来限制递归数量.<div id="app"> <child-component ...

  3. vue.js 初步学习

    跟着b站上的视频来学 首先什么是vue.js? 跟着b站上视频来学:(o゚v゚)ノ <!DOCTYPE html> <html lang="en"> < ...

  4. Vue.JS入门学习随笔

    PS:先说说学习Vue的缘由吧,学习完了React之后,突然发现又出了一款叫做vue的框架,而且据说可以引领又一波新框架的潮流,我容易吗我!!!   Vue.js(读音 /vjuː/, 类似于view ...

  5. 从零开始学习Vue.js,学习笔记

    一.为什么学习vue.js methods 只有纯粹的数据逻辑,而不是去处理 DOM 事件细节. vue.js兼具angular.js和react的优点,并且剔除了他们的缺点 官网:http://cn ...

  6. vue.js的学习中的简单案例

    今天学习了近年来挺火的一门JS技术,叫vue.js下面是它的一个简单案例: <html> <head> <title>$Title$</title> / ...

  7. vue.js的学习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Vue.js中学习使用Vuex详解

    在SPA单页面组件的开发中 Vue的vuex和React的Redux 都统称为同一状态管理,个人的理解是全局状态管理更合适:简单的理解就是你在state中定义了一个数据之后,你可以在所在项目中的任何一 ...

  9. web前端——Vue.js基础学习

    近期项目的前端页面准备引入Vue.js,看了网上一些简介,及它和JQuery的对比,发现对于新入门的前端开发来说,Vue 其实也是比较适用的一个框架,其实用性不比JQuery差,感觉还挺有意思,于是研 ...

  10. Electron: 如何以 Vue.js, Vuetify 开始应用

    Electron: 使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架 Vue.js: Web 前端用于构建用户界面的渐进式框架 Vuetify: Vue.js 的 ...

随机推荐

  1. nginx配置2个不同端口的应用

    如何配置nginx,在同一台服务器上,部署2个不同端口的web应用? 1,利用Django框架搭建的web应用,默认端口是8000: 2,利用Flask框架搭建的web应用,默认端口是5000: 第一 ...

  2. OSPF协议报文

    OSPF(Open Shortest Path First,开放最短路径优先)是一种内部网关协议(Interior Gateway Protocol,IGP),用于在同一个自治系统(Autonomou ...

  3. 使用Win32控制台实现boost共享内存通信

    发送端: #define BOOST_DATE_TIME_NO_LIB #include <boost/interprocess/shared_memory_object.hpp> #in ...

  4. vSphere是什么,你了解么?

    最近这两周都在学习VMware vSphere相关知识,昨天在做了一个项目后,VMware虚拟化之旅暂告一段落了.晚上一个人闲下来时回想了之前所学,忆起vSphere时,大脑一片空白... 我突然发现 ...

  5. NSIS打包脚本模板

    ; Script generated by the HM NIS Edit Script Wizard. ; HM NIS Edit Wizard helper defines !define PRO ...

  6. Sql语句:条件限制语句

    where select sname,sdept,sage from student where ssex = '男' or ssex = '女' and sage not between 20 an ...

  7. DevOps的工作岗位的要求

    ## 为什么需要DevOps 不是每个人都能理解可靠的版本管理和牢固的构建系统的重要性. 也不是任何人能使得软件的发布达到可靠性,可重复性和可审计的高标准.Devops的职责就是将软件的构建和发布的流 ...

  8. Web前端入门第 30 问:CSS 文本与字体样式常用属性

    CSS 盒模型是基石,文本和字体则是盒子内容的重要组成部分.毕竟清水房有了,软装也得跟上啊. 字体常用属性 font-family 定义字体类型(如: Arial, "Microsoft Y ...

  9. 『Plotly实战指南』--面积图绘制与应用

    在数据可视化领域,面积图是一种强大而直观的工具,它通过填充线条与坐标轴之间的区域来量化数据大小, 从而帮助我们清晰地展示数据的总量.趋势变化以及不同类别之间的对比. 无论是分析随时间变化的累积量,还是 ...

  10. 使用搜索引擎时如何排除一些垃圾站点,比如csdn.net

    使用搜索引擎时需要排除一些垃圾站点,比如csdn.net时,可以在关键词后面加上-site:csdn.net: stable diffusion docker部署TensorFlow 教程 -site ...