Vue3 组件
一、组件理论

二、创建组件
<template>
<div>欧阳克</div>
<OneCom></OneCom>
<one-com></one-com>
</template>
<script>
import OneCom from './components/OneCom';
export default {
components:{
OneCom : OneCom,
}
};
</script>
<template>
<div>OneCom组件文件</div>
</template>
<script>
export default {
name : "OneCom"
};
</script>
三、子组件
<template>
<div>OneCom组件文件</div>
<two-com></two-com>
</template>
<script>
import TwoCom from './TwoCom';
export default {
name : "OneCom",
components:{
TwoCom
}
};
</script>
<template>
<div>TwoCom组件文件</div>
</template>
<script>
export default {
name : "TwoCom"
};
</script>
四、使用多组件
<template>
<div>
<div>欧阳克</div>
<one-com></one-com>
<two-com></two-com>
</div>
</template>
<script>
import OneCom from "./components/OneCom.vue";
import TwoCom from "./components/TwoCom.vue";
export default {
components: {
OneCom,
TwoCom
}
};
</script>
<template>
<div>OneCom组件文件</div>
</template>
<script>
export default {
name : "OneCom"
};
</script>
<template>
<div>TwoCom组件文件</div>
</template>
<script>
export default {
name : "TwoCom"
};
</script>
五、属性传值给组件
1、属性传值
<template>
<div>欧阳克</div>
<one-com title="php中文网"></one-com>
<one-com :title="title" :msg="msg" :arr="arr" :ob="ob"></one-com>
</template>
<script>
import OneCom from "./components/OneCom.vue";
export default {
name: "Phpcn",
data() {
return {
title: "使用变量的方式传值",
msg: "消息",
arr : [
'欧阳克',
'朱天蓬',
'灭绝师太'
],
ob: {
name: "欧阳克",
age: "38岁"
}
};
},
components:{
OneCom : OneCom
}
};
</script>
<template>
<div>
<div>{{ title }}</div>
<div>{{ msg }}</div>
<div>{{ arr }}</div>
<div>{{ ob }}</div>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
};
},
props: ["title", "msg", "arr", "ob"]
};
</script>
2、接收传值并限制数据
<template>
<div>
<one-com :title="title" :msg="msg" :arr="arr" :ob="ob"></one-com>
</div>
</template>
<script>
import OneCom from "./components/OneCom.vue";
export default {
components: {
OneCom,
},
data() {
return {
title: "使用变量的方式传值",
msg: "消息",
arr : [
'欧阳克',
'朱天蓬',
'灭绝师太'
],
ob: {
name: "欧阳克",
age: "38岁"
}
};
},
};
</script>
<template>
<div>
<div>{{ title }}</div>
<div>{{ msg }}</div>
<div>{{ arr }}</div>
<div>{{ ob }}</div>
</div>
</template>
<script>
export default {
data() {
return {};
},
props: {
title: {
type: String,
default: function () {
return "php中文网";
},
required : true
},
msg: {
type: String,
default: "默认msg",
},
arr: {
type: Array,
default: function () {
return ["欧阳克","朱天蓬"];
}
},
ob: {
type: Object,
default: function () {
return { name: "朱天蓬", age: "48岁" };
}
}
}
};
</script>
<template>
<div>{{teacher}}</div>
<one-com @app_edit="app_edit"></one-com>
</template>
<script>
import OneCom from './components/OneCom';
export default {
data() {
return {
teacher : "欧阳克"
};
},
components: {
OneCom,
},
methods : {
app_edit(e){
console.log('我是父文件的app_edit方法');
this.teacher = e;
}
}
};
</script>
<template>
<div>
<button @click="edit('朱天蓬')">传给父文件</button>
<button @click="edit('灭绝师太')">传给父文件</button>
</div>
</template>
<script>
export default {
data() {
return {
};
},
methods : {
edit(teacher){
console.log('我是子文件的edit方法');
this.$emit('app_edit',teacher);
}
}
};
</script>
3、父子组件之间相互访问 $parent
<template>
<one-com></one-com>
</template>
<script>
import OneCom from './components/OneCom';
export default {
data() {
return {
};
},
components: {
OneCom
},
methods : {
app_fun() {
console.log("我是app.vue文件的app_fun方法");
}
}
};
</script>
<template>
<div>{{ one_fun() }}</div>
</template>
<script>
export default {
data() {
return {};
},
methods: {
one_fun() {
console.log("我是子组件的one_fun方法");
this.$parent.app_fun();
this.$parent.$parent.app_fun();
this.$root.app_fun();
}
}
};
</script>
<template>
<div>子组件</div>
</template>
<script>
export default {
data() {
return {};
},
methods: {
one_fun() {
console.log("我是子组件的one_fun方法");
}
}
};
</script>
<template>
<div>
<one-com ref="one" @click="app_fun()"></one-com>
</div>
</template>
<script>
import OneCom from "./components/OneCom";
export default {
data() {
return {};
},
components: {
OneCom
},
methods: {
app_fun() {
this.$refs.one.one_fun();
console.log("我是app.vue文件的app_fun方法");
}
}
};
</script>
4、插槽
<template>
<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<slot></slot>
</div>
</template>
<template>
<div>
<one-com>
<button>按钮</button>
</one-com>
<one-com>
<a>a链接</a>
</one-com>
</div>
</template>
<script>
import OneCom from "./components/OneCom";
export default {
data() {
return {};
},
components: {
OneCom
}
};
</script>
<template>
<div>
<slot></slot>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<slot name="two"></slot>
</div>
</template>
<template>
<div>
<one-com>
<button>按钮</button>
<template v-slot:two>
<button>按钮</button>
</template>
</one-com>
<one-com>
<a>a链接</a>
<template
<a>a链接</a>
</template>
</one-com>
<one-com>
<template v-slot:default>
<a>a标签</a>
</template>
</one-com>
</div>
</template>
<script>
import OneCom from "./components/OneCom";
export default {
components: {
OneCom,
}
};
</script>
<template>
<div>
<slot>第一个插槽</slot>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<slot name="two">第二个插槽</slot>
</div>
</template>
<template>
<div>
<slot></slot>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<slot name="two" :php="php"></slot>
</div>
</template>
<script>
export default {
data() {
return {
php: "PHP中文网"
}
}
};
</script>
<template>
<div>
<one-com>
<button>按钮</button>
<template v-slot:two="data">
<button>按钮{{ data.php }}</button>
</template>
</one-com>
</div>
</template>
<script>
import OneCom from "./components/OneCom";
export default {
components: {
OneCom
}
};
</script>
三、文件样式
<template>
<div class="red">{{ name }}</div>
<div>
<div class="red">{{ name }}</div>
</div>
</template>
<script>
export default {
data() {
return {
name: "欧阳克"
}
}
};
</script>
<template>
<div>
<div class="red">php中文网</div>
<one-com></one-com>
</div>
</template>
<script>
import OneCom from "./components/OneCom";
export default {
components: {
OneCom
}
};
</script>
<style scoped>
.red {
color: red;
}
</style>
<style scoped lang="scss">
</style>
四、组件生命周期


<template>
<div>欧阳克</div>
</template>
<script>
export default {
beforeCreate() {
console.log("1在创建组件之前调用");
},
created() {
console.log("2组件创建完成调用");
},
beforeMount() {
console.log("3模版挂载之前调用");
},
mounted() {
console.log("4模版挂载完成调用");
}
};
</script>
<template>
<div>
<input type="text" v-model="php" />
</div>
</template>
<script>
export default {
data() {
return {
php : "php中文网"
};
},
beforeUpdate() {
console.log("5改变内容之前调用");
},
updated() {
console.log("6改变内容之后调用");
}
};
</script>
<template>
<div>
欧阳克
</div>
</template>
<script>
export default {
beforeUnmount() {
console.log("9组件销毁之前调用");
},
unmounted() {
console.log("10组件销毁之后调用");
}
};
</script>
<template>
<div>
<one-com v-if="show"></one-com>
<button @click="show = !show">销毁</button>
<keep-alive>
<one-com v-if="show"></one-com>
</keep-alive>
</div>
</template>
<script>
import OneCom from "./components/OneCom";
export default {
components: {
OneCom
},
data() {
return {
show: true
}
}
};
</script>
<template>
<div>
欧阳克
</div>
</template>
<script>
export default {
activated() {
console.log("11组件缓存前调用");
},
deactivated() {
console.log("12组件缓存后调用");
}
};
</script>
生命周期 | 作用 |
---|
beforeCreate | 在创建组件之前调用 |
created | 组件创建完成调用 |
beforeMount | 模版挂载之前调用 |
mounted | 模版挂载完成调用 |
beforeUpdate | 改变内容之前调用 |
update | 改变内容之后调用 |
beforeUnmount | 组件销毁之前调用 |
unmounted | 组件销毁之后调用 |