首页 > 其他分享 >Vue2(笔记29) - 脚手架 - mixin混入

Vue2(笔记29) - 脚手架 - mixin混入

时间:2022-12-10 15:32:51浏览次数:38  
标签:混入 vue Vue2 配置 xxx 29 mixin 组件

mixin混入

所谓混入,就是几个组件共享一个配置,可局部混入,也可全局混入;

第一步:先建个混入文件,配置写进去,再 export 出来;

新建 mixin.js 文件: 

export const commonConfig = {
methods:{
showName(){
alert(this.name);
}
},
data(){
return{
year:2022
}
}
}

export const commonMount ={
mounted(){
console.log('加载完成!');
}
}

提示1:取个共用的配置名 commonConfig 和 commonMount; 

提示2:写个共用的方法, showName();

提示3:写个共用的属性,year;

提示4:共用的配置,还可以是钩子函数等其他配置都行;

可以申明多个配置项,但引入的时候可以全部选择,也可以只选一个;

第二步:再组件中引入文件,通过配置项 mixins:[xxx] 应用

要在 school.vue 和 student.vue 中应用,就分别修改这两个组件:

修改 school.vue 组件:

<template>
<div class="demo">
<h2 @click="showName">学校名称:{{ name }}</h2>
<h2>学校地址:{{ address }}</h2>
<h2>学年:{{year}}</h2>
</div>
</template>

<script>
import {commonConfig} from '../mixin' // 引入混入文件
export default {
name: "schoolInfo",
data() {
return {
name:"51cto",
address:"北京"
};
},
mixins:[commonConfig] // 应用混入的配置项
};
</script>

提示1:school.vue 使用的是引入来的共用属性 year;

提示2:引入混入文件中的共用配置,commonConfig 项;

import {xxx} from '../xxx'

提示3:再应用混入的配置项;

mixins:[xxx]

提示4:混入配置项跟 props 配置项一样,都要放在数组里面;

提示5:还有一个混入配置名 commonMount,在这个组件中没有用;

要在 student.vue 文件中应用混入,也要相应修改一下:

<template>
<div class="demo">
<h2 @click="showName">学员名称:{{name}}</h2>
<h2>学员年龄:{{age}}</h2>
<h2>学年:{{year}}</h2>
</div>
</template>

<script>
import {commonConfig,commonMount} from '../mixin'
export default{
name:'studentInfo',
data(){
return{
name:'Jack',
age:18
}
},
mixins:[commonConfig,commonMount]
}
</script>

提示1:引入了两个混入配置声明;

看下效果:

Vue2(笔记29) - 脚手架 - mixin混入_mixin混入

提示1:引入了共用的属性 year ,都显示了,DevTools 中也能查看;

Vue2(笔记29) - 脚手架 - mixin混入_Vue_02

提示2:引入了共用的方法 showName(),点击名字后也都能显示;

提示3:student.vue 组件中,还引入了 mounted() 钩子函数,也执行了;


全局混入

在每个组件中都引入混入的写法是局部混入;

写在 main.js 文件中的写法是全局混入,就不需要在每个组件中分别混入了;

修改 main.js

import Vue from 'vue'
import App from './App.vue'
import { commonConfig,commonMount } from './mixin'

Vue.config.productionTip = false
Vue.mixin(commonConfig)
Vue.mixin(commonMount)

new Vue({
render: h => h(App),
}).$mount('#app')

提示1:import 两个混入配置声明;

提示2:分别应用​ Vue.mixin() ​两个混入,使用几个就引入几次;

Vue2(笔记29) - 脚手架 - mixin混入_mixin混入_03

提示1:分别点击学校名和学员名时,都能正常输出;

提示2:显示了4次“加载完成”,意思是说在每个组件都执行了一次;

Vue2(笔记29) - 脚手架 - mixin混入_Vue_04

在 Vue DevTools 中看到,共有4个组件,全部应用了 year 属性和 mounted() 钩子函数;


优点:只写一次都能用了;

不足:全局混入了,哪哪都有了;


共享配置的优先级

1)组件里的配置优先,其次是混入里的配置,例如:数据属性和方法等;

如果 school.vue 组件中,也使用了 year 属性,并有值,以当前组件为优先;

export default {
name: "schoolInfo",
data() {
return {
name:"51cto",
address:"北京",
year:2023 // 优先
};
},
};

Vue2(笔记29) - 脚手架 - mixin混入_Vue_05

2)针对钩子函数,不论优先级,都会执行,而且混入里的钩子函数先执行;

给 school.vue 和 student.vue 组件也分别加上 mounted() 钩子函数;

school.vue 中添加 mounted()

mounted(){
console.log("school加载了");
}

student.vue 中也添加 mounted() 

mounted() {
console.log("student加载了");
},

看下效果:

Vue2(笔记29) - 脚手架 - mixin混入_mixin混入_06

除了全局的 mounted() 4次钩子函数都执行了外,两个组件的也分别执行了;

注意:全局的钩子函数先执行,本组件中的钩子后执行;

Vue2(笔记29) - 脚手架 - mixin混入_mixin混入_07

加载顺序:

子组件先执行(黄框),app 组件其次(蓝框),root 最后(绿框)


【mixin(混入)】总结

功能:可能把多个组件共用的配置提取成一个混入对象;

使用方式:

第一步定义混入,例如:

{
data(){...},
methods:{...},
...
}

第二步:引入混入配置项,例如:

import {xxx,xxx} from '../xxx'

 第三步:应用混入,例如:

1、全局混入: Vue.mixin(xxx)

2、局部混入:mixins:['xxx','xxx','xxx']


标签:混入,vue,Vue2,配置,xxx,29,mixin,组件
From: https://blog.51cto.com/ahuiok/5927593

相关文章

  • 每日食词—day029
    proceduren.程序、过程、步骤、手续temporarilyadv.临时性、暂时地、暂时preparedadj. v.准备好的、有准备的tablen. v.表格、数据库表、桌子、搁置es......
  • 29.1208
    #include<stdio.h>intf(intx);unsignedlonglongj(intx);intmain(){ intn; scanf("%d",&n); f(n);  return0;} intf(intx){ inti; unsign......
  • vue2 购物车21
    main:importVuefrom'vue'importAppfrom'./App.vue'//vantimportVantfrom'vant';import'vant/lib/index.css';import{NavBar,SubmitBar,Card,Checkb......
  • 《安富莱嵌入式周报》第294期:将C/C++代码转换为各种高级语言,超炫渲染着色器,VS2022新闻
    往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104更新视频教程:USB应用实战视频教程第5期:手把手玩转USBHID免驱方式......
  • Vue2.0 中使用Less
    第一步  npm安装lessnpminstalllessless-loader--save 第二步 修改webpack.base.conf.js文件,配置loader加载依赖,让其支持外部的less,在原来的代码上添加如下......
  • (29)C#多线程
    使用线程的原因1.不希望用户界面停止响应。2.所有需要等待的操作,如文件、数据库或网络访问需要一定的时间。一个进程的多个线程可以同时运行不同cpu或多核cpu的不同内核上注......
  • vue2 插槽20 slot 作用域插槽 具名插槽
    vue官方规定:每一个slot插槽,都要有一个name名称如果省略了slot的name属性,则有一个默认名称叫做default组件中使用:<slotname="default"><h6>这是def......
  • 快速生成Vue2模板
    1.点击文件,再点击首选项,然后选择用户片段; 2.在弹出来的输入框中,选择第一行vue.json或者第二行新建全局代码片段文件都可,都是为了打开vue.json文件;  3.显示这种情......
  • Vue2(笔记25) - 脚手架 - render函数
    render 函数从错误提示开始打开项目入口文件:main.jsimportVuefrom'vue'importAppfrom'./App.vue'Vue.config.productionTip=falsenewVue({render:h=>h(App),......
  • Vue视频 | 【Vue2 + Vue3 前端教程】完整版
    目前大部分公司还是以vue、react技术为主的,而Vue中还是以Vue2为主流,但不可否认Vue3是未来所必须的且已有这个趋向了今天给大家介绍一个Vue的教程里面既有现在主流的Vue2......