美文网首页
mixin--vue的混入

mixin--vue的混入

作者: 3e2235c61b99 | 来源:发表于2020-12-23 12:52 被阅读0次

以下是vue官网对mixin的介绍:

混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

选项合并:当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。比如,数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。
同名钩子函数将合并为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。

刚开始看的时候,我感觉这个东东和组件好像没有什么区别.然鹅,看了这篇文章后发现我还是太年轻了.下面我们来看看mixins和普通情况下引入组件有什么区别

  • 组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,单本质上两者还是泾渭分明,相对独立。
    父组件 + 子组件 >>> 父组件 + 子组件
  • 而mixins则是在引入组件之后,则是将组件内部的内容如data等方法、method等属性与父组件相应内容进行合并。相当于在引入后,父组件的各种属性方法都被扩充了。
    父组件 + 子组件 >>> new父组件

我自己想了下mixin的使用场景:

  1. 不同的页面需要使用相同的数据
  2. 不同的页面可以使用相同的方法
  3. 其他
    以下是我自己写的一个小栗子:
<!--page-a.vue-->
<template>
    <div class="padd50">
        <div>page-a</div>
        <el-date-picker v-model="time" type="datetimerange" :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" align="left" />
        <el-button @click="commit">提交</el-button>
    </div>
</template>

<script>
    import mixin from './mixin'

    export default {
        name: "page-a",
        mixins: [ mixin ],
        data() {
            return {
                time: '',
                name: '明妃',
            }
        },

        created() {
            console.log('page-a  父组件created钩子后执行')
            console.log(this.name)
            console.log(this.exmap)
        },

        mounted() {
            console.log('page-a  父组件mounted钩子后执行')
        }
    }
</script>
<!--page-b.vue-->
<template>
    <div class="padd50">
        <div>page-b</div>
        <el-date-picker v-model="time" type="datetimerange" :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" align="left" />
        <el-button @click="commit">提交</el-button>
    </div>
</template>

<script>
    import mixin from "./mixin";

    export default {
        name: "page-b",
        mixins: [ mixin ],
        data() {
            return {
                time: ''
            }
        },

        created() {
            console.log('page-b  父组件钩子后执行')
        }
    }
</script>
// mixin.js
const mixin = {
    data() {
        return {
            pickerOptions: {
                shortcuts: [{
                    text: '最近一周',
                    onClick(picker) {
                        const end = new Date()
                        const start = new Date()
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
                        picker.$emit('pick', [start, end])
                    }
                }, {
                    text: '最近一个月',
                    onClick(picker) {
                        const end = new Date()
                        const start = new Date()
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
                        picker.$emit('pick', [start, end])
                    }
                }, {
                    text: '最近三个月',
                    onClick(picker) {
                        const end = new Date()
                        const start = new Date()
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
                        picker.$emit('pick', [start, end])
                    }
                }]
            },
            name: '废柴',
            exmap: 'mixin特有,可以在父组件直接使用',
        }
    },

    methods: {
        commit() {
            console.log("mnxin方法被提交")
        }
    },

    created() {
        console.log('mixin created钩子先执行')
    },

    mounted() {
        console.log('mixin mounted钩子先执行')
    }
}

export default mixin

访问page-a页面,输出如下:

mixin钩子先执行
page-a  父组件钩子后执行
明妃
mixin特有,可以在父组件直接使用
mixin mounted钩子先执行
page-a  父组件mounted钩子后执行

可以看到,如下:

  1. mixin钩子和父组件钩子会合并,都会执行
  2. mixin钩子先于父组件钩子执行
  3. 当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。比如,数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。
  4. 值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象。两个对象键名冲突时,取组件对象的键值对。

相关文章

  • mixin--vue的混入

    以下是vue官网对mixin的介绍: 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复...

  • typecript中的MIxins理解

    知识导向 对象的混入 类的混入 对象的混入 类的混入 下面的代码演示了如何在TypeScript里使用混入。 后面...

  • vue中的混入

    全局混入 局部混入

  • LESS - Mixins(混入)

    混入 Mixins 混入是指把已存在的样式混入到别的样式中。 你可以把 class 选择器 和 id 选择器混入到...

  • 第二十六节:Vue选项:Vue混入对象

    Vue混入的认识: 混入是一种代码的组织方式, 可以在多个组件间横向复用代码. 定义混入对象,只要将混入对象添加到...

  • 《混入》

    飞鸟属于天空, 绿树属于大地, 云在跟着风, 影在随着光, 当鲜花开满这里, 在青草上去放牧牛羊, 把鱼儿放归水中...

  • Vue 之 混入

    1、混入 混入 (mixin) 是作用是分发 Vue 组件中可复用的功能; 一个混入对象可以包含任意组件选项; ...

  • Vue混入

    Vue 混入 混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组...

  • vue 混入-19

    什么是混入 混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件...

  • vue mixin

    混入 mixin 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象...

网友评论

      本文标题:mixin--vue的混入

      本文链接:https://www.haomeiwen.com/subject/ixyynktx.html