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自身组件,会导致方法丢失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值