热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vue中的slot和mixins

前言vue为我们提供了很多复用性的方式,slot和mixins就是其中两种…下面对这两种方式做一下记录插槽使用场景-该组件被多个地方使用-每个父组件中对该组件的内部有一部分需要特殊

前言

vue 为我们提供了很多复用性的方式,slot 和 mixins 就是其中两种…下面对这两种方式做一下记录

插槽使用场景

- 该组件被多个地方使用
- 每个父组件中对该组件的内部有一部分需要特殊定制
- slot可以让我们更好的复用组件的同时并对其定制化处理
- 可以理解为父组件想子组件传递了一段 html 文本
要求:
1.子组件模板包含至少一个 插槽
2.父组件整个内容片段将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签本身

1.普通插槽 slot

父组件: 负责分发插槽内容

我是父组件分发给 child 的所有内容

父组件获取子组件可以通过 this.$refs.child 来做操作
子组件:
模板中放置一个 组件,
我们可以自定义组件中的方法和数据,封装一些通用逻辑,比如前几篇中封装的 scroll滚动组件

2.具名插槽 子组件通过 name 属性 来匹配父组件分发的内容

父组件: 添加 slot 属性来作为标识

我是 header 分发的内容 111

我是 main 分发的内容222

我是 footer 分发的内容333

在2.6.0 以上使用的是 v-slot:header; 默认插槽为: v-slot:default
子组件: slot 添加 name 属性来接受父组件分发的 DOM 元素

当然,我们还可以调换插槽的位置...

3.作用域插槽 父组件可以接收来自子组件的 slot 传递过来的参数值

可以理解为: 子组件中的作用域插槽可以为父组件中的插槽的展示提供数据
子组件:


父组件:



在 2.6 以上绑定值的方式: v-slot:header="slotHeaderProps"
而且可以使用解构 v-slot:header="{value}", 将子组件传过来的值解构
还有就是, 我们可以把 slot直接写在子组件行内, 不必另起一个 template
即这样: {{value}}

vue3.0以后 slot 和 slot=”xxx”,slot-scope 的方式会被废弃…
新的用法slot, v-slot:xxx || v-slot:default, v-slot:xxx=”slotProps”

混入 Mixins 使用

- 也是为了实现代码逻辑复用
- 当多个组件中出现业务逻辑重复时我们就可以抽离重复代码片段,写成一个混入对象
- 父组件直接引入这个对象

代码演示

就拿一个比较常见的场景: 下拉加载更多数据; 这类业务在H5端可以说是非常常见了,当我们很多页面都要用到时,就可以抽离成一个混入对象

// 滚动加载
import {throttle} from "@/common/js/tool";
export const scrollMixin = {
methods: {
doScrollLoading() {
// 滚动超出高度
let scrollTop =
window.pageYOffset ||
document.documentElement.scrollTop ||
document.body.scrollTop;
// 滚动区域高度
let scrollHeight =
document.body.scrollHeight || document.body.scrollHeight;
// 可视区高度
let clientHeight =
document.documentElement.clientHeight || document.body.clientHeight;
if (scrollHeight - clientHeight - scrollTop <= this.bottomHeight) {
// 组件中需加入开关和加载更多; 还是有些耦合了...
if (!this.isLoadMore) {
this.loadMore();
}
}
}
},
computed: {
bottomHeight() {
return this.$store.state.footerHeight;
}
},
mounted() {
window.addEventListener("scroll", throttle(this.doScrollLoading, 100, 1));
},
destroyed() {
window.removeEventListener("scroll", throttle(this.doScrollLoading, 100, 1));
}
}

父组件中引入使用

import { scrollMixin } from "@/mixins/scrollMixin";
mixins: [scrollMixin]
注意组件中重写的方法会覆盖混入中的方法,loadMore和 isloadMore 需要在
引用的组件中进行重写

推荐阅读
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
  • 一、路由首先需要配置路由,就是点击good组件进入goodDetail组件配置路由如下{path:goodDetail,component:goodDetail}同时在good组件中写入如下点击事件,路由中加入 ... [详细]
  • 1223  drf引入以及restful规范
    [toc]前后台的数据交互前台安装axios插件,进行与后台的数据交互安装axios,并在main.js中设置params传递拼接参数data携带数据包参数headers中发送头部 ... [详细]
  • 本文涉及源码版本为2.6.9准备工作down一份Vue源码,从package.json入手,找我们需要的代码1、package.json中的scripts,build:nodesc ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • VUE中引用路径的配置
    在vue项目开发中经常引用JS、CSS、IMG文件。当项目较大时文件层级很多,导致路径很长,我们可以通过在bulidwebpack.base.conf.js设置简便的引用路径一、 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 媒介本文的前身是源自github上的项目awesome-github-vue,但由于该项目上次更新时候为2017年6月12日,许多内容早已逾期或是许多近期优异组件未被收录,所以小肆 ... [详细]
author-avatar
东cz莞痴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有