vue3学习实例纪要

66 阅读4分钟

创建运行vue3框架

    第一步:npm init vue@latest          创建项目 
    第二步:npm install                  安装
    第三步:npm i sass                   安装组件库(Element Plus)
    第四部:npm run dev                  运行

注册main.js

import { createApp } from 'vue'          (从Vue3核心库中导入 创建应用实例的方法)
import App from './App.vue'              (导入根组件 App.vue)
import ElementPlus from 'element-plus'   (导入 Element Plus 组件库的 **核心模块** 和 **全局样式文)
import 'element-plus/dist/index.css'    
import Header from "./pages/Header.vue"  (导入Header页面级组件)
const app = createApp(App)        调用`createApp`方法,以`App.vue`为根组件,创建一个 Vue 应用实例
app.use(ElementPlus)              给 Vue 应用实例 “安装” Element Plus 插件,让全局都能使用 Element Plus 的组件
app.component("Header", Header)   全局注册组件:第一个参数是组件的 “使用名称”<Header></Header>,第二个参数是导入的组件本身。

APP.vue根组件的内容

<template>
   <Header :form-data="formData"/>
</template>

这种写法的本质是  “父子组件嵌套” :当前组件(可理解为 “父组件”)通过模板标签直接使用子组件,子组件的渲染位置完全由父组件的模板结构决定。

核心功能:通过 props 传递数据

模板中通过  :属性名="数据"  的语法(Vue 的 props 传递方式)向子组件传递数据,这是父子组件通信的核心方式:

1. 数据传递规则

  • :form-data="formData":将父组件的 formData 数据,通过 form-data 这个 props 名称传递给子组件(如 Header等)。

2. 子组件如何接收数据?

以 Header 组件为例,它需要在自身的代码中声明接收 form-data 这个 props:

<!-- Header.vue 中 -->
<script setup>
import { defineProps } from 'vue'

// 声明接收 props:form-data//
const props = defineProps({
  formData: {
    type: Object, // 假设 formData 是一个对象//
    required: true // 表示这个数据是必须传递的//
  }
})

// 使用 props 中的数据//
console.log(props.formData)
</script>

引用响应式数据

<script setup>              \\这是 Vue 3 引入的 `<script setup>` 语法糖,用于简化组件的编写\\
import { ref } from 'vue'   \\导入了 Vue 的 `ref` 函数,用于创建响应式数据\\
const formData = ref({      \\定义了 `formData` 响应式对象\\
            title: "上海餐饮管理有限公司",         
    \\`tagList`:数组类型,包含两个对象,每个对象有 `label` 和 `value` 属性,看起来是标签选择数据\\
            tagList: [{ label: "中型饭店", value: 1 }, { label: "其他类", value: 2 },], 
            name: "某某餐饮",} ) 
const tableData = [ {        \\这是一个普通的 JavaScript 数组,包含一条数据记\\
            ledgerName: '2025年7-9月清洗记录', 
            operationFrequency: '季度', 
            reportDate: '2025-07-01', 
            },
      </script>

组件案例“header”

这段代码是一个 Vue 3 的单文件组件,分为模板(template)、脚本(script)和样式(style)三部分:

1.模板部分(<template>

<template>
        <div class="header"> \\一个类名为 `header` 的容器 div\\
        \\一个类名为 `title` 的 div,通过 `{{ formData.title }}` 绑定显示标题文本\\
            <div class="title"> {{formData.title}}</div>
          \\ 一个类名为 `tag-group` 的 div,用于展示标签组\\
            <div class="tag-group">  \\类名为 `tag-group` 的 div,用于展示标签组\\
  \\使用 `v-for` 指令遍历 `formData.tagList` 数组,为每个元素渲染一个 `el-tag` 组件(Element Plus 组件库的标签组件)\\
            <el-tag v-for="itme in formData.tagList" :key="item.value" type="primary">{{ item.label }}</el-tag>   \\`key="item.value"` 为循环的每个标签指定唯一 key,`type="primary"` 设置标签的主题样式为主要色,`{{ item.label }}` 显示标签的文本内容\\
            
            </div>
        </div>
</template>

2. 脚本部分(<script setup>

<script setup>
import { defineProps } from 'vue'   \\导入 `defineProps` 函数,用于定义组件的 props(父组件传递过来的属性)\\
 const props = defineProps({        \\通过 `defineProps` 定义了 `formData` 属性:\\
    formData: {                           
        type: Object,               \\类型为 `Object`(对象)\\
        required: true,             \\`required: true` 表示这是一个必填属性,父组件必须传递该属性\\
})

3. 样式部分(<style>

<style lang="scss" scoped>       \\使用 `lang="scss"` 指定使用 SCSS 预处理器,`scoped` 表示样式只作用于当前组件,不会污染其他组\\
.header {                        \\为 `.header` 容器内的元素设置样式\\    
    .title {                     \\`.title` 类:字体大小 24px,粗体\\
        font-size: 24px;
        font-weight: bold;
    }
    .tag-group {                 \\`.tag-group` 类:顶部外边距 5px,底部内边距 5px\\
        margin-top: 5px;
        padding-bottom: 5px;
        .el-tag {
        margin-right: 10px;      \\标签组内的 `.el-tag` 组件:右侧外边距 10px(标签之间的间距)\\
        }
    }
}
</style>

Element Plus 的 el-descriptions

 <el-descriptions :column="3" border>    \\:column="3"`:设置描述列表每行显示 3 个信息项(即一行展示 3 组 "标签 + 内容")\\
                                         \\`border`:添加边框样式,使整个信息列表呈现表格化的边框效果,更清晰地区分各信息项\\

      <!-- 各类信息项 -->
     <el-descriptions-item label="门牌店名:">{{ formData.name }}</el-descriptions-item> 
     \\每个 `el-descriptions-item` 代表一组信息,包含 `label`(标签 / 标题)和内容:\\
     \\门牌店名:绑定 `formData.name`\\
        <el-descriptions-item label="是否位于商业综合体内:">
            <el-tag size="small"></el-tag>
        </el-descriptions-item>
     \\否位于商业综合体内:固定显示 `<el-tag size="small"></el-tag>`(标签组件,显示 "是")\\
     
</el-descriptions>