vue-混入( mixin 更方便的组件功能复用方法)的使用
前言
vue 中组件完成了样式和功能的综合复用,通过自定义指令完成了一部分功能的复用,本文总结一下混入在vue项目开发中提供的非常便利的功能复用。
正文
1、混入的分类
(1)全局混入
<div id="app">
<h1>我是app组件</h1>
</div>
<script>
// 全局混入
Vue.mixin({
created: function () {
console.log("全局混入");
}
})
new Vue({
el: "#app",
data() {
return {
}
},
methods: {
}
})
</script>
上面的代码中,vue.mixin方法中传入一个混入的对象,该对象为 created 钩子函数,在app组件加载过程中调用了该钩子函数,结果如下:
(2)局部混入
<div id="app">
<mix-item></mix-item>
<mix-item2></mix-item2>
</div>
<script>
// 局部混入
var myMixin = {
created: function () {
this.hello()
},
methods: {
hello: function () {
console.log('hello from mixin!')
}
}
}
Vue.component("mix-item", {
mixins: [myMixin],
template: `<div>我是mix-item</div>`
})
Vue.component("mix-item2", {
mixins: [myMixin],
template: `<div>我是mix-item2</div>`
})
new Vue({
mixins: [myMixin],
el: "#app",
data() {
return {
}
},
methods: {
}
})
</script>
上面的代码中通过字面量的形式创建了一个对象变量 myMixin ,在两个子组件和 Vue(#app) 父组件中分别混入了这个对象,因此三个地方会调用该混入对象,首先app父组件调用,然后才是子组件调用,结果如下:
2、钩子函数的合并
<div id="app">
<mix-item></mix-item>
<mix-item2></mix-item2>
</div>
<script>
// 局部混入
var myMixin = {
created: function () {
console.log("我是混入的方法");
},
}
Vue.component("mix-item", {
mixins: [myMixin],
created() {
console.log("我是mix-item 的created方法");
},
template: `<div>我是mix-item</div>`
})
Vue.component("mix-item2", {
mixins: [myMixin],
created() {
console.log("我是mix-item2 的created方法");
},
template: `<div>我是mix-item2</div>`
})
new Vue({
mixins: [myMixin],
el: "#app",
data() {
return {
}
},
created() {
console.log("我是app组件的created方法");
},
methods: {
}
})
</script>
上面的代码中定义了一个myMixin的变量,在子组件和app父组件中都混入了该变量,同时每个组件内部也使用了该对象对应的钩子函数,同名的钩子函数出现时出现的结果如下:
注意:当组件和混入对象含有同名选项时,同名的钩子函数将合并为一个数组,因此都将被调用,但是混入对象的钩子函数将在自身组件钩子函数之前调用。
3、data对象的合并
<div id="app">
<mix-item></mix-item>
<mix-item2></mix-item2>
</div>
<script>
// 局部混入
var myMixin = {
data() {
return {
msg: "helloMixin",
}
},
}
Vue.component("mix-item", {
data() {
return {
msg: "helloMixin",
foo: "mix-item"
}
},
created() {
console.log("mix-item", this.$data);
},
mixins: [myMixin],
template: `<div>我是mix-item</div>`
})
Vue.component("mix-item2", {
data() {
return {
msg: "helloMixin",
foo: "mix-item2"
}
},
created() {
console.log("mix-item2", this.$data);
},
mixins: [myMixin],
template: `<div>我是mix-item2</div>`
})
new Vue({
mixins: [myMixin],
data: {
msg: "helloMixinApp",
foo: "fooo"
},
created() {
console.log("#app", this.msg);
console.log("#app", this.foo);
},
el: "#app",
methods: {
}
})
</script>
上面的代码中通过字面量的形式创建一个混入对象 myMinxin ,在父组件( #app )和两个子组件中分别混入了该对象,其中组件内部 data 对象和混入对象存在同名属性,结果如下:
注意:当混入对象为data数据对象时,数据对象会在组件内部进行递归合并,当混入对象和组件data同名冲突的时候,组件中的 data 会覆盖混入对象的 data 属性。
4、methods 对象的合并
<div id="app">
<mix-item></mix-item>
<mix-item2></mix-item2>
</div>
<script>
// 局部混入
var myMixin = {
methods: {
sayHello() {
console.log("hello myMixin");
}
}
}
Vue.component("mix-item", {
created() {
this.sayHello()
},
mixins: [myMixin],
template: `<div>我是mix-item</div>`
})
Vue.component("mix-item2", {
created() {
this.sayHello()
},
mixins: [myMixin],
template: `<div>我是mix-item2</div>`
})
new Vue({
mixins: [myMixin],
created() {
this.sayHello()
},
el: "#app",
methods: {
sayHello() {
console.log("hello app");
}
}
})
</script>
上面的代码中,定义了一个含methods属性的混入对象,在父组件(app)和两个子组件中分别混入该对象,其中组件内部存在和混入对象同名的方法时候结果如下:
注意:当混入对象属性为methods、cpmponents、directive 时,这些属性会在组件内部进行递归合并,当混入对象和组件内部属性同名冲突的时候,组件中的属性会覆盖混入对象的属性。
写在最后
vue中的混入提供了一种非常灵活的方式来分发组件中可复用的功能,很大程度上提高了代码的复用性,混入有点类似与继承,当子组件对象继承了父组件对象,一般情况下遵循就近原则,但是混入又不完全等同于继承,vue混入存在对不同配置的混入策略。
以上就是本文的全部内容,希望给读者带来些许的帮助和进步,方便的话点个关注,小白的成长踩坑之路会持续更新一些工作中常见的问题和技术点。最后,大家国庆节快乐!!!
vue-混入( mixin 更方便的组件功能复用方法)的使用的更多相关文章
- vue混入 (mixin)的使用
混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项. 使用示 ...
- vue 混入 mixin,自定义指令,过滤器
vue 混入 mixin ,分发 vue 组件中重复的功能 局部的书写格式 // mixin.js var mymixin = { // 这是一个对象:对象里面的写法与组件里面的写法一模一样,组件该 ...
- vue混入mixin的使用,保证你看的明明白白!
场景描述 有些时候,我们发现有些组件部分功能代码是几乎是一样的. 这个时候,我们就可以将相同的逻辑代码抽离出来 此时我们的主角混入mixin就登场了 下面我们有a-test和b-test两个组件,点击 ...
- 浅析vue混入(mixin)
vue中的混入,可以在一定程度上提高代码的复用性.通俗来说,混入类似于“继承”,当前组件对象继承于组件对象,一般情况下遵循“就近原则”.但是与继承不同的是,继承一般都跟随着属性的重写与合并,混入在不同 ...
- 七、vue语法补充二(动态组件 & 异步组件、访问元素 & 组件、混入)
1..sync 修饰符 2.3.0+ 新增 vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定.类似于v-model的效果 例子: this.$ ...
- 应用三:Vue之混入(mixin)与全局混入
(注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的) 首先介绍一下混入mixin的概念: 官方文档:混入提供了一种非常灵活的方式,来分发 Vu ...
- Vue之混入(mixin)与全局混入
Vue之混入(mixin)与全局混入 接下来通过一个简单的例子看看混入的基础用法: 首先新建一个mixin.js文件,添加以下代码. let mixin = { data() { return { m ...
- WijmoJS V2019.0 Update2发布:再度增强 React 和 Vue 框架的组件功能
前端开发工具包 WijmoJS 在2019年的第二个主要版本 V2019.0 Update2 已经发布,本次发布涵盖了React 和 Vue 框架下 WijmoJS 前端组件的功能增强,并加入更为易用 ...
- Vue.js 学习笔记之六:构建更复杂的组件
在掌握了如何构建与编译 Vue 组件的基础知识之后,接下来就可以试着来构建一些更具有实际用处的复杂组件了.为了赋予组件更具实用性的后面,首先要做的就是让这些组件具备监听用户自定义事件的能力,并且允许用 ...
随机推荐
- 【mysql】mysql简介及高手是如何练成的
1.什么是mysql MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 公司. Mysql 是开源的,可以定制的,采用了GPL 协议,你可以修改源码 ...
- java中的静态内部类
静态内部类是 static 修饰的内部类,这种内部类的特点是: 1. 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 2. 如果外部类的静态成员与内部类的成 ...
- struts2思想学习(一)
OOP 面向对象编程 AOP 面向切面编程 而在struts2 处处体现了面向切面编程的思想(动态代理最典型)! 拦截器其实也是面向切面编程!拦截器切断了所有请求到action的操作 并做了很多的前提 ...
- SpringSecurity入门
基础 spring security的底层就是一个过滤器链 ExceptionTranslationFilter是一个异常过滤器,用来处理认证授权过程中的异常 UseranmePasswordAuth ...
- Focal Loss(RetinaNet)笔记 一种减小类别不平衡影响的方法
Paper: https://arxiv.org/abs/1708.02002 还参考了:https://www.jianshu.com/p/8e501a159b28 其中p是预测属于某类的概率.
- Notepad++插件推荐和下载
Notepad++因为其强劲的插件支持,越来越受到编程爱好者的喜欢.很多优秀的插件现在已经默认安装了,下面是100多款受欢迎的Notepad++插件的介绍和下载地址. XML Tools 这个插件是包 ...
- HTTP系列之:HTTP缓存
目录 简介 HTTP中的缓存种类 HTTP中缓存响应的状态 HTTP中的缓存控制 缓存刷新 revving 缓存校验 Vary响应 总结 简介 为了提高网站的访问速度和效率,我们需要设计各种各样的缓存 ...
- 【CSS】拼图验证练习
抄自B站Up主CodingStartup起码课 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- 记一次线上问题 → 对 MySQL 的 ON UPDATE CURRENT_TIMESTAMP 的片面认知
开心一刻 老婆痛经,躺在沙发上,两岁的女儿看着她问道 女儿:妈妈,你怎么了 老婆:妈妈肚子痛 女儿:哦,妈妈你头疼 老婆:不是头疼,妈妈是肚子疼 女儿用她的不锈钢饭碗砸向老婆的额头,说道:妈妈,你哪里 ...
- java线程池-工作队列workQueue
线程池之工作队列 ArrayBlockingQueue 采用数组来实现,并采用可重入锁ReentrantLock来做并发控制,无论是添加还是读取,都先要获得锁才能进行操作 可看出进行读写操作都使用了R ...