当前位置: 首页 > article >正文

v-bind,v-on与简写:和@有什么区别?

对于vue项目来说,用的比较多的就是简写的:@,但是v-bind,v-on与简写的:@是有区别的

对于用来二次重写element-ui的组件来说,就需要使用v-bind和v-on,
因为:v-bind和v-on可以直接传递一个对象到子组件中,子组件可以使用$attrs接受

  <date-picker
    ref="dom"
    v-bind="{...$props,...$attrs}"
    v-on="{...$listeners,input}"
  >
    <slot />
  </date-picker>

例:

<template>
    <custom-table
        ref="dom"
        v-bind="{ ...$props, ...$attrs }"
        element-loading-text="拼命加载中"
        element-loading-spinner="el-icon-loading"
        element-loading-background="rgba(255, 255, 255, 0.7)"
        v-on="$listeners"
    >
        <slot />
    </custom-table>
</template>

<script>
/**
 1. $attrs 从父组件中传入的所有属性的集合(不包含class和style,ref)
 2. $props 当前组件中定义的props属性
 3. $listeners 从父组件中传入的所有的事件监听(不包含.native的事件)
 4. <slot/> 这个不是为了重构提供的属性,但是我们调用某个组件若是需要插槽的话,还是需要继续以插槽的形式向下探
 */
import { Table as CustomTable } from 'element-ui'
export default {
    components: {
        CustomTable,
    },
    props: {
        stripe: {
            type: Boolean,
            default() {
                return true
            },
        },
        border: {
            type: Boolean,
            default() {
                return true
            },
        },
    },
    mounted() {
        this.$emit('forward-ref', this.$refs.dom)
    },
}
</script>

代码见githab
https://github.com/li1164267803/test-demo

总结

重写与重构的区别?

重写是在原有的基础上进行扩展,添加私有属性与方法,不丢失原有的属性与方法,重构是相当于改别人的源代码,能重写就不要重构

如何重写?

通过vue的全局注册组件,将前面引入的element组件进行覆盖,在重写的组件中引入原来的element组件,通过 a t t r , attr, attr,props,$listener获取父组件的方法和属性v-bind传递到element组件中,这只是做到了不丢失原有属性和方法,然后通过props添加私有属性进行添加默认值,如果父组件没有传递值,则使用默认值,有值将值传递到element组件

重写的作用是什么?

项目中为了是风格统一,功能统一的问题,每个组件都需要隆于的写,后期需要统一更换维护太麻烦,重写的好处就是更改一个组件项目里使用到这个组件的全部更新,不会导致粗心遗漏,还能够让开发人员无感知的进行自己的工作,element上有的属性依然可以继续使用

重写的弊端?

当使用重写的组件的时候使用ref是获取的当前组件而不是element自身组件,会导致方法丢失


http://www.kler.cn/a/287222.html

相关文章:

  • freertos任务调度学习
  • D3中颜色的表示方法大全
  • 刷题强训(day09)【C++】添加逗号、跳台阶、扑克牌顺子
  • 学习threejs,通过SkinnedMesh来创建骨骼和蒙皮动画
  • 小程序-基于java+SpringBoot+Vue的小区服务管理系统设计与实现
  • 代码随想录算法训练营第五十一天|Day51 图论
  • [Linux网络]TCP三次握手和四次挥手的连接建立和断开
  • win10环境下gvim离线配置插件的一些补充
  • 8.22
  • javascript指什么
  • blender4.2中安装插件的方式
  • 国密起步5:GmSSL3交叉编译arm64
  • Qt/QML学习-Dialog
  • 深入解析Go语言os/user包:用户和组管理实战指南
  • Apache Arrow简介
  • vscode Git代码版本回退
  • 【 html+css 绚丽Loading 】 000031 三元轮回盘
  • mac电脑登录循环重启问题
  • 基于Angular技术的MES系统基础管理功能的实现
  • c/c++:CMakeLists.txt中添加编译/连接选项使用内存错误检测工具Address Sanitizer(ASan)
  • 设计模式 11 享元模式
  • 力扣SQL仅数据库(580-608)
  • Wallcraft壁纸大全3.39.0 4K画质精品壁纸解锁VIP
  • PHP智能化排队叫号系统微信小程序源码
  • 如何防范ddos 攻击
  • 项目延期,怎么有效调整计划,追赶进度