- 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM,以及在数据改变时更新 DOM。
- 在此过程中,它也会运行被称为
生命周期钩子的函数
,让开发者有机会在特定阶段运行自己的代码!
<script setup>
import {ref,onUpdated,onMounted,onBeforeUpdate} from 'vue'
let message =ref('hello')
// 挂载完毕生命周期
onMounted(()=>{
console.log('-----------onMounted---------')
let span1 =document.getElementById("span1")
console.log(span1.innerText)
})
// 更新前生命周期
onBeforeUpdate(()=>{
console.log('-----------onBeforeUpdate---------')
console.log(message.value)
let span1 =document.getElementById("span1")
console.log(span1.innerText)
})
// 更新完成生命周期
onUpdated(()=>{
console.log('-----------onUpdated---------')
let span1 =document.getElementById("span1")
console.log(span1.innerText)
})
script>
<template>
<div>
<span id="span1" v-text="message">span> <br>
<input type="text" v-model="message">
div>
template>
<style scoped>
style>
组件化:对js/css/html统一封装,这是VUE中的概念
模块化:对js的统一封装,这是ES6中的概念
组件化中,对js部分代码的处理使用ES6中的模块化
案例需求: 创建一个页面,包含头部和菜单以及内容显示区域,每个区域使用独立组建!
- 创建vue项目
npm create vite
cd vite项目
npm install
- 安装相关依赖
npm install sass
npm install bootstrap
<script setup>
script>
<template>
<div>
欢迎:XX
<a href="#">退出登录a>
div>
template>
<style scoped>
style>
<script setup>
script>
<template>
<div>展示内容div>
template>
<style scoped>
style>
<script setup>
script>
<template>
<div>
<ul>
<li>学生管理li>
<li>图书管理li>
<li>老师管理li>
<li>会员管理li>
ul>
div>
template>
<style scoped>
style>
<script setup>
import Header from "./components/Header.vue";
import Navigation from "./components/Navigation.vue";
import Content from "./components/Content.vue";
script>
<template>
<div>
<Header class="header">Header>
<Navigation class="nav">Navigation>
<Content class="content">Content>
div>
template>
<style scoped>
.header {
height: 80px;
border: 1px solid red;
}
.nav {
width: 15.5%;
height: 800px;
border: 1px solid green;
float: left;
}
.content {
width: 84%;
height: 800px;
border: 1px solid yellow;
float: right;
}
style>
1. 父传子:
2. 子传父:
3. 兄弟传参:
Vue3 中父组件向子组件传值可以通过 props 进行,具体操作如下:
首先,在父组件中定义需要传递给子组件的值,接着,在父组件的模板中引入子组件,同时在引入子组件的标签中添加 props 属性
并为其设置需要传递的值。
在 Vue3 中,父组件通过 props
传递给子组件的值是响应式的。也就是说,如果在父组件中的传递的值发生了改变,子组件中的值也会相应地更新。
Navigation.vue :子发送参数 给App.vue
<script setup>
import { defineEmits } from "vue";
//1.定义要发送给父组件的方法,可以1或者多个
let emites = defineEmits(["sendMessage"]);
function send(data) {
//2.触发事件,向父容器发送数据
emites("sendMessage", data);
}
script>
<template>
<div>
<ul>
<li @click="send('学生管理')">学生管理li>
<li>图书管理li>
<li>老师管理li>
<li>会员管理li>
ul>
div>
template>
<style scoped>
style>
App.vue 接收从Nav…的参数
<script setup>
import Header from "./components/Header.vue";
import Navigation from "./components/Navigation.vue";
import Content from "./components/Content.vue";
import { ref } from "vue";
//1.定义变量接收navigator传递的参数
var navigator_menu = ref("测试");
// 2. 方法接收传递来的数据
const receiver = data => {
navigator_menu.value = data;
};
script>
<template>
<div>
<hr />
{{navigator_menu}}
<hr />
<Header class="header">Header>
<Navigation @sendMessage="receiver" class="nav">Navigation>
<Content class="content">Content>
div>
template>
App.vue 传递参数 给Context.vue
<script setup>
import Header from "./components/Header.vue";
import Navigation from "./components/Navigation.vue";
import Content from "./components/Content.vue";
import { ref } from "vue";
//定义接受navigator传递参数
var navigator_menu = ref("测试");
const receiver = data => {
navigator_menu.value = data;
};
script>
<template>
<div>
<hr />
{{navigator_menu}}
<hr />
<Header class="header">Header>
<Navigation @sendMessage="receiver" class="nav">Navigation>
<Content class="content" :message="navigator_menu">Content>
div>
template>
<style scoped>
.header {
height: 80px;
border: 1px solid red;
}
.nav {
width: 15.5%;
height: 800px;
border: 1px solid green;
float: left;
}
.content {
width: 84%;
height: 800px;
border: 1px solid yellow;
float: right;
}
style>
<script setup>
import { defineProps } from "vue";
defineProps({
message: String
});
script>
<template>
<div>
展示内容:
<hr />
{{ message }}
div>
template>
<style scoped>
style>