【Vue】组件化 组件的注册 App.vue


文章目录

  • Ⅰ. 组件及组件化
    • 一、为什么需要组件?
      • 1. 思考
      • 2. 解决方案
    • 二、组件及组件化
      • 1. 组件
      • 2. 组件化
    • 三、根组件 `App.vue`
      • 1. 根组件
      • 2. 组件是由三部分构成
    • 四、组件的使用
      • 1. 创建组件
      • 2. 导入组件
      • 3. 注册组件💥
      • 4. 使用组件
      • 5. 练习
    • 五、组件的全局注册
      • 1. 步骤
      • 2. 使用组件(与局部组件一样)
      • 3. 注意
      • 4. 语法
      • 5. 练习

Ⅰ. 组件及组件化

一、为什么需要组件?

1. 思考

以可折叠面板为例,现要展示3个,如何操作?

可折叠面板案例的代码:

<script setup>import{ref}from'vue'constvisible=ref(false)</script><template><h3>可折叠面板</h3><divclass="panel"><divclass="title"><h4>自由与爱情</h4><spanclass="btn"@click="visible = !visible">{{visible?'收起':'展开'}}</span></div><divclass="container"v-show="visible"><p>生命诚可贵,</p><p>爱情价更高。</p><p>若为自由故,</p><p>两者皆可抛。</p></div></div></template><style lang="scss">body{background-color:#ccc;}#app{width:400px;margin:20px auto;background-color:#fff;border:4px solid green;border-radius:1em;box-shadow:3px 3px 3pxrgba(0,0,0,0.5);padding:1em 2em 2em;}#app h3{text-align:center;}.panel{.title{display:flex;justify-content:space-between;align-items:center;border:1px solid #ccc;padding:01em;}.title h4{line-height:2;margin:0;}.container{border:1px solid #ccc;padding:01em;border-top-color:transparent;}.btn{cursor:pointer;}}</style>

2. 解决方案

  1. 把需要复用的一段标签,抽离并封装到一个单独的vue文件里,连同相关JSCSS放到一起
  2. 哪里要用这个组件,哪里导入,当做标签使用即可

新建一个src/components/MyPanel.vue文件:

<script setup>import{ref}from'vue'constvisible=ref(false)</script><template><divclass="panel"><divclass="title"><h4>自由与爱情</h4><spanclass="btn"@click="visible = !visible">{{visible?'收起':'展开'}}</span></div><divclass="container"v-show="visible"><p>生命诚可贵,</p><p>爱情价更高。</p><p>若为自由故,</p><p>两者皆可抛。</p></div></div></template><style lang="scss"scoped>.panel{.title{display:flex;justify-content:space-between;align-items:center;border:1px solid #ccc;padding:01em;}.title h4{line-height:2;margin:0;}.container{border:1px solid #ccc;padding:01em;border-top-color:transparent;}.btn{cursor:pointer;}}</style>

然后在App.vue导入并使用该组件:

<script setup>// 导入importMyPanelfrom'./components/MyPanel.vue'</script><template><h3>可折叠面板</h3><!--使用--><MyPanel/><MyPanel/><MyPanel/></template><style>body{background-color:#ccc;}#app{width:400px;margin:20px auto;background-color:#fff;border:4px solid green;border-radius:1em;box-shadow:3px 3px 3pxrgba(0,0,0,0.5);padding:1em 2em 2em;}#app h3{text-align:center;}</style>

二、组件及组件化

1. 组件

组件是一个独立的、可复用Vue实例,也是一段独立的 UI 视图,代码上体现在是一个独立的.vue文件,包含JS + HTML + CSS三部分组成。

类似乐高和积木一样,我们可以通过任意的乐高或积分进行组合,拼装成我们需要的成品。

2. 组件化

定义:一种代码的开发思想,体现在一个页面可以拆分成一个个组件,每个组件有着自己独立的结构、样式、行为;通过组件的组合与拼装形成一个完整的页面,本质是代码的一种拆分思想,化大为小、化繁为简、分而治之

好处:各自独立、便于复用

比如:下面这个页面,可以把所有的代码都写在一个页面中,但是这样显得代码比较混乱,难以维护。我们可以按模块进行组件拆分

三、根组件App.vue

1. 根组件

根组件是整个应用最上层的组件,包裹所有普通小组件,如下图所示:

2. 组件是由三部分构成

  • template:HTML 结构
  • script:JS 逻辑
  • style:CSS 样式(可支持less/scss,需要装包)
  • 让组件支持less/scss
    • style标签,lang="less/scss"开启less/scss功能
    • 装包:npm i less less-loader -D或者npm i sass -D

四、组件的使用

组件的一系列场景命名规范如下所示:

场景✅推荐写法可选写法说明
文件名MyHeader.vuemy-header.vue官方推荐 PascalCase,和类名一样清晰
import 引入import MyHeader from ‘./MyHeader.vue’import Haha from ‘./MyHeader.vue’变量名随意,但最好和文件名一致,便于阅读
局部注册components: { MyHeader }components: { Haha }名字和模板里的标签要对应
模板 (SFC 内部)Vue 自动识别两种形式
HTML 文件直接写 (非 .vue)❌ 不支持HTML 标签不区分大小写,必须用短横线

1. 创建组件

新建.vue文件,编写组件的三部分代码

2. 导入组件

在需要的vue文件中的<script setup>中导入需要的组件即可!

注意:导入的组件对象名称,推荐保持和文件名一致

import组件对象from'相对路径'// 例子:importMyPanelfrom'./components/MyPanel.vue'

3. 注册组件💥

💥注意:局部组件无需注册全局组件要在main.js中注册

之所以局部组件不需要注册,是因为vue3<script setup>自动完成了局部注册,如果是vue2或者普通的<script>的话,则需要手动注册局部组件,如下面所示:

<script>importMyHeaderfrom'./components2/MyHeader.vue'// 如果是 vue2 或者普通的 <script> 的话,则需要手动注册局部组件exportdefault{components:{MyHeader}}</script><template><my-header></my-header></template>

4. 使用组件

把组件当做自定义标签使用:(单双标签均可)

<组件名></组件名><组件名/>// 例子:<!--大驼峰 双标签--><MyPanel></MyPanel><!--大驼峰 自闭合的单标签--><MyPanel/><!--烤串法(更推荐这种) 双标签--><my-panel></my-panel><!--烤串法 自闭合的单标签--><my-panel/>

5. 练习

components2/MyHeader.vue文件:

<script setup></script><template><divclass="my-header">我是my-header</div></template><style>.my-header{height:100px;line-height:100px;background-color:#8064a2;}</style>

components2/MyMain.vue文件:

<script setup></script><template><divclass="my-main">我是my-main</div></template><style>.my-main{height:400px;margin:20px0;line-height:400px;background-color:#f79646;}</style>

components2/MyFooter.vue文件:

<script setup></script><template><divclass="my-footer">我是my-footer</div></template><style>.my-footer{height:100px;line-height:100px;background-color:#4f81bd;}</style>

App.vue文件:

<template><my-header></my-header><my-main></my-main><my-footer></my-footer></template><script setup>importMyHeaderfrom'./components2/MyHeader.vue';importMyMainfrom'./components2/MyMain.vue';importMyFooterfrom'./components2/MyFooter.vue';</script><style>*{margin:0;}#app{height:100vh;padding:10px;background:skyblue;font-size:30px;color:#fff;text-align:center;}</style>

五、组件的全局注册

全局注册的组件,在项目的任何组件中都能使用

1. 步骤

  1. 创建.vue组件(三个组成部分)
  2. main.js中进行全局注册

2. 使用组件(与局部组件一样)

当成 HTML 标签直接使用:

  • 双标签:<组件名></组件名>
  • 自闭合的单标签:<组件名 />

3. 注意

组件名规范:大驼峰命名法(推荐)烤串法,如MyHeadermy-header

4. 语法

main.js中通过导入组件,并且使用app.component()方法注册组件:

// main.js文件importMyPanelfrom'./components/MyPanel.vue'// 注册全局组件语法:// app.component('组件名', 组件对象)// 大驼峰组件名(更推荐这种,因为使用标签时候既可以用大驼峰,也可以用烤串法)app.component('MyPanel',MyPanel)// 烤串法组件名(需要注意:使用标签时候,只能用烤串法,而不能再用大驼峰了)app.component('my-panel',MyPanel)

注意,上面代码中的app对象,是createApp(App)得到的应用对象!

5. 练习

components3/MyButton.vue文件:

<script setup></script><template><buttonclass="my-button">通用按钮</button></template><style scoped>.my-button{height:50px;line-height:50px;padding:015px;background-color:#3bae56;border-radius:5px;font-size:16px;color:white;border:none;cursor:pointer;}</style>

main.js中,导入并全局注册:

import{createApp}from'vue'importAppfrom'./App.vue'importMyButtonfrom'./components3/MyButton.vue'constapp=createApp(App)// 拿到应用对象app.component("MyButton",MyButton)app.mount('#app')// 最后再去挂载即可

components3/MyHeader.vue文件:

<script setup></script><template><divclass="my-header">我是my-header<my-button/></div></template><style>.my-header{height:100px;line-height:100px;background-color:#8064a2;}</style>

components3/MyMain.vue文件:

<script setup></script><template><divclass="my-main">我是my-main<my-button/></div></template><style>.my-main{height:400px;margin:20px0;line-height:400px;background-color:#f79646;}</style>

components3/MyFooter.vue文件:

<script setup></script><template><divclass="my-footer">我是my-footer<my-button/></div></template><style>.my-footer{height:100px;line-height:100px;background-color:#4f81bd;}</style>

App.vue文件:

<template><my-header></my-header><my-main></my-main><my-footer></my-footer></template><script setup>importMyHeaderfrom'./components3/MyHeader.vue';importMyMainfrom'./components3/MyMain.vue';importMyFooterfrom'./components3/MyFooter.vue';</script><style>*{margin:0;}#app{height:100vh;padding:10px;background:skyblue;font-size:30px;color:#fff;text-align:center;}</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1216009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【递归算法】快速幂解决 pow(x,n)

题目链接&#xff1a;pow(x,n) 一、题目解析 题目很简单&#xff0c;要求x的n次幂。 要注意n的取值范围&#xff1a;n可能是负数&#xff0c;这时候我们要利用数学中 x⁻ⁿ 1 / xⁿ 来转换&#xff1b;n可能是 -2&#xff0c;若转换成正数则会超过 int 类型的最大取值 2-1。…

AI原生应用领域AI工作流的团队协作模式

AI原生应用领域AI工作流的团队协作模式 关键词:AI原生应用、AI工作流、团队协作模式、协作流程、协作工具 摘要:本文聚焦于AI原生应用领域中AI工作流的团队协作模式。先介绍了相关背景知识,包括目的范围、预期读者等。接着通过故事引入核心概念,以通俗易懂的方式解释了AI原…

ARC213

ARC213A. Swapping Game 因为从任意排列到任意排列至多需要 \(\frac{L(L−1)}{2}\) 步,所以不必考虑出现 \(L(L−1)\) 个连续步骤都无法得到 \(C_i\) 的情况。DP 即可。 B. Hamming Distance is not 1 起初觉得只选 \…

AI智能名片链动2+1模式S2B2C商城小脚本在客服沟通中的应用与效果

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于51单片机的智能空调系统 温度控制 智能家居

目录 基于51单片机的智能空调系统概述系统核心功能硬件组成软件设计应用场景与优势注意事项 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 基于51单片机的智能空调系统概述 基于51单片机的智能空调系统是一种低成本、高效率的智能家…

基于51单片机的智能药盒 GSM短信 药量检测 定时吃药

目录 基于51单片机的智能药盒系统概述核心功能模块硬件设计要点软件算法逻辑扩展功能设计应用场景适配 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 基于51单片机的智能药盒系统概述 智能药盒系统以51单片机为核心控制器&#xff0…

基于51单片机的智能路灯控制系统 人体感应 灯光控制 嵌入式定制

目录 系统概述硬件组成软件设计功能扩展应用场景定制化服务 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 基于51单片机的智能路灯控制系统是一种嵌入式解决方案&#xff0c;通过人体感应模块&#xff08;如红外传感器&…

Java计算机毕设之基于springboot的小学课后服务管理平台培训机构课后服务平台小程序(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】基于springboot的房产交易系统(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2025年教我学英语 - 动植物

2025年教我学英语 - 动植物1、老虎 - tiger [ˈtaɪɡə(r)] 狮子 - lion [ˈlaɪən] 熊猫 - panda [ˈpndə] 猴子 - monkey [ˈmʌŋki] 大象 - elephant [ˈelɪfənt]2、狐狸 - fox [fɒks] 狼 - wolf [wʊlf] 熊…

【无人机控制】基于LQR 气动特性 + 刚体运动学,建立固定翼飞行器的非线性动力学模型,并在巡航点做小扰动线性化,得到6 阶状态空间模型附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

【无人机控制】基于生物启发控制策略(Vs1-Vs4 级联控制)的四旋翼无人机轨迹跟踪附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#…

完整教程:Linux网络编程—传输层协议UDP和TCP

完整教程:Linux网络编程—传输层协议UDP和TCP2026-01-25 22:44 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

Unicode 码点(Code Point) 与 它的 UTF-8编码, UTF-16编码的换算程序

熟悉Unicode标准的朋友都知道,统一码的码点(又称码值),在使用往往不是直接使用,而是使用UTF-8或UTF-16或UTF-32编码方法来进行编码后再用。 UTF32编码就是直接用四字节来表示Unicode编码,不足四字节的补0,这样对英…

智能家居控制系统开题报告

智能家居控制系统开题报告 一、选题背景 随着物联网、人工智能、大数据等技术的快速迭代&#xff0c;以及居民生活水平的提升与消费需求的升级&#xff0c;智能家居已成为建筑智能化、家庭数字化转型的核心方向。智能家居控制系统作为智能家居生态的核心枢纽&#xff0c;通过整…

SentGraph:用于多跳检索增强问答的层次化句子图谱

文章摘要本文提出SentGraph框架&#xff0c;一种基于句子级图谱的检索增强生成方法&#xff0c;专门用于解决多跳问答任务。通过引入修辞结构理论&#xff08;RST&#xff09;建模句子间细粒度逻辑关系&#xff0c;构建层次化句子图谱&#xff0c;实现精准的证据检索。实验表明…

吐血推荐9个一键生成论文工具,本科生搞定毕业论文!

吐血推荐9个一键生成论文工具&#xff0c;本科生搞定毕业论文&#xff01; 毕业论文难&#xff1f;AI 工具来帮你 随着人工智能技术的不断进步&#xff0c;越来越多的学生开始借助 AI 工具来完成学业任务。特别是对于本科生而言&#xff0c;撰写毕业论文是一项既耗时又复杂的…

2026年郑州GEO优化公司推荐TOP3:从技术到效果的实战选型指南

2026年郑州GEO优化公司推荐TOP3:从技术到效果的实战选型指南 在AI搜索成为流量新战场的2026年,郑州企业想挤上豆包、文心一言的“推荐榜”,选对GEO优化公司比“砸钱投流”更关键——毕竟90%的企业都栽过“贴牌工具…

【毕业设计】基于springboot的培训机构课后服务平台小程序(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…