关于mixins:官方文档: https://cn.vuejs.org/v2/guide/mixins.html

一、components

  Vue.component是用来注册或获取全局组件的方法,其作用是通过vue.extend生成的扩展实例构造器注册为一个组件,全局注册的组件可以在所有晚于该组件注册语句构造的vue实例中使用。

// 先注册一个baseOptions
let baseOptions = {
template: `<p>{{ firstName }}{{ lastName }}aka {{ alias }}</p>`,
data: function(){
firstName: 'walter',
lastName: 'beijie',
alias: '贝贝'
},
created() {
console.log('One')
}
}
new Vue(baseOptions) // 实例化一个组件 -- one Vue.component('my-component', vue.extend(baseOptions))
// 传如一个选项对象(自动调用Vue.extend),等价于以上代码
Vue.component('my-component', baseOptions)
// 获取注册的组件(始终返回构造器)
const MyComponent = Vue.component(baseOptions)
// 当我我们需要在其他页面'扩展'或者叫‘混合’baseOptions时,Vue中提供了多种实现方式: extend\mixins\extends

二、extend

  可以扩展Vue构造器,从而用预定义选项创建可复用的组件构造器

let BaseComponent = Vue.extend(baseOptions)
// 基于基础组件BaseComponent,再扩展新逻辑
new BaseComponent({
created() {
console.log('Two')
}
// 其他自定义逻辑
}).$mount('#app') // 可以挂载到一个元素上
// -- One
// -- Two

三、mixins

  mixins选项接受一个混入对象的数组,这些混入实例对象可以像正常的实例对象一样包含选项,他们将在Vue.extend()里最终选择使用相同的选项合并逻辑合并。

  mixin钩子按照传入顺序依次调用,并在调用组件自身之前调用。

// mixins示例
var mixin = {
created() { console.log('mixin-created') }
} var vm = new Vue({
created() { console.log('vm-created') } ,
mixins: [mixin]
}) // -- mixin-created
// -- vm-created

  mixins的要点:

    1:data混入组件的数据优先

    2:钩子函数将混合为一个数组,混入对象的钩子将在组件钩子之前调用

    3:值为对象的,例如methods、components、directives,将被混合为同一个对象。两个对象键名冲突时,取组件对象的键值对

    4:以上合并策略可以通过Vue.config.optionMergeStrategies修改

四、extends

  允许声明扩展另一个组件(可以是一个简单的选项对象或者构造函数),而无需使用vue.extend(),主要是为了便于扩展单文件组件。和mixins类似,区别在于,组件自身的选项会比要扩展的源组件具有更高的优先级,mixins接受的是个数组类型,extends是一个对象

  

new Vue({
extends: baseOptions,
created() {
console.log('extends-created')
}
}) // One
// extends-created

五、总结

  vue.extend()只是创建一个构造器,为了创建可复用的组件

  mixins,extedns是为了扩展组件

  

Vue中mixins、extends、extend和components的作用和区别的更多相关文章

  1. vue中mixins的使用方法和注意点(详)

    mixins基础概况 vue中的解释是这样的,如果觉得语言枯燥的可以自行跳过嘿~ 混入 (mixins): 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使 ...

  2. vue中mixins的理解及应用

    vue中mixins的理解及应用 vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情 ...

  3. Vue中Mixins使用

    mixins是一种分发Vue组件中可复用功能的一种灵活方式. mixins是一个JavaScript对象,可以包含组件中的任意选项,比如Vue实例中生命周期的各个钩子函数,也可以是data.compo ...

  4. Java泛型中<? extends E>和<? super E>的区别

    这篇文章谈一谈Java泛型声明<? extends E>和<? super E>的作用和区别 <? extends E> <? extends E> 是 ...

  5. Vue mixins extends extend components

    mixins 调用方式: mixins: [mixin1, mixin2] 是对父组件的扩充,包括methods.components.directive等... 触发钩子函数时,先调用mixins的 ...

  6. vue中mixins的使用

    与vuex的区别 经过上面的例子之后,他们之间的区别应该很明显了哈~ vuex:用来做状态管理的,里面定义的变量在每个组件中均可以使用和修改,在任一组件中修改此变量的值之后,其他组件中此变量的值也会随 ...

  7. vue中mixins的使用方法和注意点(详2)(异步请求的情况)

    当混合里面包含异步请求函数,而我们又需要在组件中使用异步请求函数的返回值时,我们会取不到此返回值,如下: mixin中 组件中 控制台 解决方案:不要返回结果而是直接返回异步函数 mixin中 组件中 ...

  8. vue中assets文件夹与static文件夹的区别

    1.如果这些产品图片文件“万年不变”,放在 /static 目录里,(不需要使用require将这些图片作为模块来引用) var products = [{ img: '/static/img/pro ...

  9. Vue中computed(计算属性)、methods、watch的区别

    实现效果:字符串的动态拼接 methods方法 html: <div id="app"> <!-- 监听到文本框数据的改变 --> <input ty ...

随机推荐

  1. 学习Apache(六)

    Apache 是一款使用量排名第一的 web 服务器,LAMP 中的 A 指的就是它.由于其开源.稳定.安全等特性而被广泛使用.下边记录了使用 Apache 以来经常用到的功能,做此梳理,作为日常运维 ...

  2. Effective Java —— 用静态工厂方法代替构造器

    本文参考 本篇文章参考自<Effective Java>第三版第一条"Consider static factory methods instead of constructor ...

  3. 关于Css的垂直居中的一些方法

    前两种方法称为大致居中,一般误差随高度的减小而减小,不过一般来说不怎么看得出来,除非你用javascript调用offsetTop来查看.不然没有强迫症的比较难看出来.但是兼容性很好,尤其是table ...

  4. 【001】学习前提——安装linux虚拟机,搭建docker

    1. 配置linux 1.1 修改配置 安装virtualbox的过程略过. 进入cd /etc/sysconfig/network-scripts,编辑:vi ifcfg-enp0s3 1>将 ...

  5. location中的各个属性

    http://172.16.20.218:8080/m/MGU20201126001-001/index.html?username=admin&password=123#/write   浏 ...

  6. js判断json数据是否存在某字段的方法

    方式一 !("key" in obj) if("name" in json){//json就是数组,name是你要找的值 console.log("有 ...

  7. 如何在 Java 中实现最小生成树算法

    定义 在一幅无向图 \(G=(V,E)\) 中,\((u, v)\) 为连接顶点 \(u\) 和顶点 \(v\) 的边,\(w(u,v)\) 为边的权重,若存在边的子集 \(T\subseteq E\ ...

  8. python中faker模块的使用

    Faker 安装 pip install Faker 基本使用 from faker import Faker #创建对象,默认生成的数据为为英文,使用zh_CN指定为中文 fake = Faker( ...

  9. msyql查看版本号、最大连接数、当前连接数等

    1.查看版本号 select version(); 2.查看最大连接数 show variables like 'max_connections'; 3.查看当前连接数(如果是root帐号,你能看到所 ...

  10. 聊聊UI自动化的PageObject设计模式

    当我们开发UI自动化测试用例时,需要引用页面中的元素(数据)才能够进行点击(动作)并显示出页面内容.如果我们开发的用例是直接对HTML元素进行操作,则这样的用例无法"应对"页面中U ...