一、注册事件
如果子组件想要修改父组件的内容,不能在子组件内进行操作,必须在父组件内进行操作,在子组件内注册一个事件,然后在父组件进行调用
Header.vue,在div这给容器中绑定一个点击事件,然后这个方法里使用$emit,注册一个事件,第一参数是事件名称,第二个参数是事件的值,以此类推。注册这个事件后,需要有一个地方触发事件,就是在App.vue里触发
<template>
<div @click="changeTitle" class="Header">
<h1>{{ title }}</h1>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
},
},
data() {
return {};
},
methods: {
changeTitle() {
//注册一个事件,参数1:事件名称 参数2....: 值,如果有更多的参数,继续往后写,
//注册这个事件后,就要有一个地方触发这个事件
this.$emit("titleChange", "我是emit通过到app.vue中修改了title值");
},
},
};
</script>
<style scoped>
.Header {
background: lightgreen;
padding: 10px;
}
h1 {
color: #222;
text-align: center;
}
</style>
App.vue,在<Header 这个组件里,触发这个事件,事件名称需要与注册的事件名称保持一致,然后等于一个方法,在methods中写这个方法,这个方法的入参就是注册事件时,传的那个入参。这样就可以修改父组件的n内容。
<template>
<!-- 包括html -->
<div id="app">
<!-- 注册了一个事件后,在这触发这个事件,名称要和触发的事件名称一样 -->
<Header @titleChange="updateTitle" :title="title" />
<User v-bind:usersname="users" />
<Footer :title="title" />
</div>
</template>
<script>
// js部分,逻辑部分
//import HelloWorld from "./components/HelloWorld.vue";
//1、引入组件
import User from "./components/Users.vue";
import Header from "./components/Header.vue";
import Footer from "./components/Footer.vue";
export default {
name: "App",
data() {
return {
users: [
{ usename: "test1", wechat: "1234567", show: false },
{ usename: "test2", wechat: "1234567", show: false },
{ usename: "test3", wechat: "1234567", show: false },
{ usename: "test4", wechat: "1234567", show: false },
],
title: "我是tester",
};
},
components: {
User,
Header,
Footer,
},
methods: {
//注册事件会传递,过来一个值,作为入参
updateTitle(updatedTitle) {
console.log(updatedTitle);
this.title = updatedTitle;
},
},
};
</script>
<style scoped>
/* css部分 */
</style>