实现student和school组件中都能点击弹出名字,可以用混合将其抽离出来,混合的本质是与原本组件做交集,不会影响原组件的数据,若有冲突,原组件优先级更高
下面是school组件代码
<template>
<div>
<h1 @click="showName">学校名字:{{ name }}</h1>
<h1>{{ address }}</h1>
<button @click="changeAddress">点击修改地址</button>
</div>
</template>
<script>
//引入混合,提高复用, 哪里用哪里引入,在main.js引入就是全局
//数据冲突时以原本文件为主。
//生命周期钩子不会冲突,混合中都会加载,先输出mixin里的mount,因为先import完成
import { mixin } from "../mixin";
export default {
// eslint-disable-next-line vue/multi-word-component-names
name: "school",
data() {
//是函数式,因为组件内的数据最好不要共享
return {
name: "a school",
address: "北京",
};
},
methods: {
changeAddress() {
console.log(this.address);
this.address = "武汉";
},
},
mounted(){
console.log('这是student的mount')
},
mixins: [mixin] //可以引入多个mixin
};
</script>
<style scoped>
</style>
student组件代码,ref的用法写在了to_see方法中
<template>
<div>
<h2 @click="showName">学生:{{name}}</h2>
<h2>年龄:{{age}}</h2>
<button @click="age_add">点击增加年龄</button>
<button @click="to_see" ref="btn">点击查看dom元素</button>
</div>
</template>
<script>
import {mixin} from '../mixin';
export default {
// eslint-disable-next-line vue/multi-word-component-names
name: 'student',
data() { //是函数式,因为组件内的数据最好不要共享
return {
name:'a student',
age:23
};
},
methods: {
age_add(){
this.age++
},
to_see(){
console.log(this.$refs.btn);//获取dom元素类似于getElementById,获取原本dom
}
},mixins: [mixin]
};
</script>
mixin.js
export const mixin = {
methods: {
showName() {
console.log(this.name);
alert(this.name);
}
},mounted() {
console.log('这是混合里的mounted');
},
}
版权声明:本文为qq_42312396原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。