Vue:组件化开发

我们为什么要组件化开发?

在之前的vue中,我们要么是通过本地引入vue.js进行开发,要么就是通过CLI(脚手架)来创建环境然后单独在App.vue中进行开发,这样的开发模式当然没有问题,但是当项目庞大起来后,将所有的组件,data,methods等等选项式组件放在一个文件中进行开发是很不理智的,后期维护的成本巨大是毋庸置疑的,同时文件庞大带来的首页渲染问题该如何解决呢?向服务器申请网页源码所花费的时间提升也不利于用户的体验,当然还有命名上同名的情况,即使可以设置不同的作用域,但会造成代码的冗余,不利于优化。

所以,我们将不同的组件抽离出来写在不同文件中,这样可以让每个部分各司其职,而且最重要的是这大大提升了组件的复用性,我们把写好的组件写好作为类似ppt模板的东西,当我们需要在某个地方使用这个组件时只需要导入并注册一下这个组件就可以而不需要去思考其他逻辑。简单来讲,组件化开发把过去混杂在一起的代码模式转变成了如拼图一般的代码模式。当然,组件化开发产生了文件的分离,这使得如果要构建的组件间的通信也不如之前同一文件下简单。总的来说,组件化除了难一些以外基本上优于过去的编程模式。

组件化开发如何部署环境?

为了部署vue组件化开发的环境,我们一般采用脚手架,也就是CLI,在使用脚手架之前,我们得确保nodejs的配置:找到nodejs官网后根据自己设备选择合适的安装包后一路next就可以了。

在安装CLI中,我们会使用到nodejs中的npm,当然也可以使用pnpm(这个更新一点,但是好像得自己配环境,这个看其他的pnpm配置文章就可以了)。这里就用npm了。

检查你的前置条件是否满足

打开命令窗口(win+R) ,键入

npm -v

 顺便检查一下nodejs:键入

node -v

都没出问题的话就可以安装脚手架了,有问题重装一下nodejs。进入Vue CLI,我们可以有两种方法来配置环境,第一种就是通过webpack来部署,这个方法是默认的。第二种方法是使用vite来配置,这个速度更快,只要1.1s左右,比webpack快2s,除了速度,使用vite也是一种趋势,有时间可以学学vite方法,这里就用webpack的方式。

可以看到官方推荐使用Vite来创建自己的项目,但本文还是采用下方传统的方式:

键入

npm install -g @vue/cli

 下完后验证一下是否安装成功: 键入

vue -V

有其版本号就说明安装成功,如果显示没有vue这个命令的话也不要紧,可以手动进入nodejs中寻找一下vue.exe,把路径拷到环境变量PATH中即可。

接下来就是最后一步:

首先你得有个放工程的文件夹,我这里用test来举例了,用的vscode(这个可以在命令窗口完成,但前提是你之前的脚手架是装在全局下的,也就是没切过路径的情况下):

进入vscode终端 ,cd到test文件夹中,键入

vue create beginner(项目名称)

接下来选择vue的版本和一些部件,对于新手来说,只要个babel 就可以了,其他的对入门不是很有必要。

其他的选项都随意,vue的版本看你需求。我还是推荐vue3,毕竟有composition API,挺好用的。

创建完就是一坨文件,我这里就不讲那些配置文件了,主要就是两个命令用来启动项目:

cd beginner(这个看你自己的项目名)

npm run serve 

以上在创完项目会提示的。

基本的界面介绍

其次就是src文件夹了,这就是写网页,写功能的地方。

components文件夹一般放组件(要不说组件化开发呢),App.vue就是根组件,是最大的组件,其他组件都写依附在它身上,本质上还是组件。main.js是程序的入口,一般就写些根组件的配置。

 

一般这些代码都不会变,直接当套路就行了,其实作用也就等同于

<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><div id="app"></div><script src="../static/vue.js"></script><script>const app = Vue.createApp({)app.mount("#app")</script></body></html>

 

组件化的注册与使用?

到此为止,基本的环境我们已经设定好了,接下来就可以引入本文正文了,对于组件的注册,我们有两种方式:

  • 全局注册(用的较少)
  • 局部注册(用的很多)

全局注册,顾名思义就是在根组件中进行注册,在任何子组件中都可以使用。

局部注册,指必须在某个子组件中注册后才可以使用。

为什么全局注册用的很少?

如果组件进行全局注册后,那么它可以在任何地方使用,这难道不是让操作更加方便了?

其实不然,全局注册后的组件即使未被使用,在打包时也会占据空间,而且这也不利于理解组件间的嵌套关系,所以只有在必要的时候才会使用全局注册。

全局注册

 

import { createApp } from 'vue'
import App from './01_vue嵌套关系/components/App.vue'
import student from './01_vue嵌套关系/components/student.vue'const app = createApp(App);
app.component("student-info", student);
app.mount("#app");

以上为main.js的内容,我们调用app中的component方法,第一个参数为自定义组件名称,第二给参数为组件的模板以及逻辑。当然你也可以直接把模板和逻辑直接写在第二个参数中。

局部注册

局部注册其实更好理解,因为它更符合组件树的概念,接下来用一个例子来解释。

App.vue文件

<template>
<h2>{{ title }}</h2>
<student></student>
</template><script>
import student from './student.vue'export default{components:{student},data(){return{title:"我是标题"}}}
</script><style>
h2{color:black;
}
</style>

 student.vue文件

<template><p>姓名:{{name}}</p><p>班级:{{class}}</p><p>学号:{{ID}}</p>
</template><script>
export default {data(){return{name:"Mike",class:"7",ID:"001"}}
}
</script><style></style>

在上面例子中,我们在App.vue(根组件)中,首先导入了student组件,然后在components中局部注册student组件,components是新的选项式api,后面还会有更多(props,emits,生命周期函数等等)。在局部注册后,我们就可以使用这个组件了,关于组件命名问题,横短线命名法和驼峰命名法都是可以的,它们可以互相转化,例如:“MyBanner” --> “my-banner”

组件与组件之间相互独立,在使用组件时不必担心命名重复或者逻辑冲突的问题,但在后面组件之间相互通信需要注意这类情况。

 

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

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

相关文章

3 Python开发工具:VSCode+插件

本文是 Python 系列教程第 3 篇&#xff0c;完整系列请查看 Python 专栏。 Visual Studio Code的安装非常简单&#xff0c;就不放这里增加文章篇幅了。 相比PyCharm&#xff0c;VSCode更加轻量&#xff0c;启动速度快。并且搭配Python插件就能实现和Pycharm一样的代码提示、高…

摄影曝光:曝光模式认知

写在前面 学习整理《摄影曝光&#xff1a;拍出好照片的49个关键技法》读书笔记博文内容涉及曝光模式简单认知适合小白认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好好做事&#xff0c;所以唯一的解决办法就是行动起来&#xff0c;认真…

PyTorch深度学习模型训练流程:(二、回归)

回归的流程与分类基本一致&#xff0c;只需要把评估指标改动一下就行。回归输出的是损失曲线、R^2曲线、训练集预测值与真实值折线图、测试集预测值散点图与真实值折线图。输出效果如下&#xff1a; 注意&#xff1a;预测值与真实值图像处理为按真实值排序&#xff0c;图中呈现…

【JS】使用MessageChannel实现深度克隆

前言 通常使用简便快捷的JSON 序列化与反序列化实现深克隆&#xff0c;也可以递归实现或者直接使用lodash。 但 JSON 序列化与反序列化 无法处理如下的循环引用&#xff1a; 实现 MessageChannel 内部使用了浏览器内置的结构化克隆算法&#xff0c;该算法可以在不同的浏览器上…

Qt WebAssembly 警告:构建套件中未设置编译器

目录 Qt WebAssembly 警告:构建套件中未设置编译器问题解决方法 参考资料 Qt WebAssembly 警告:构建套件中未设置编译器 问题 安装好QT之后构建套件中出现黄色感叹号Qt WebAssembly 警告:构建套件中未设置编译器。 原因是现在你只安装了qt for webassembly的qt的库&#xff…

Task-Embedded Control Networks for Few-Shot Imitation Learning

发表时间&#xff1a;CoRL 2018 论文链接&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId4500197057754718210&noteId2424798567891365120 作者单位&#xff1a;Imperial College London Motivation&#xff1a;就像人类一样&#xff0c;机器人应该能够利用来…

JVM上篇:内存与垃圾回收篇-07-方法区

笔记来源&#xff1a;尚硅谷 JVM 全套教程&#xff0c;百万播放&#xff0c;全网巅峰&#xff08;宋红康详解 java 虚拟机&#xff09; 文章目录 7. 方法区7.1. 栈、堆、方法区的交互关系7.2. 方法区的理解7.2.1. 方法区在哪里&#xff1f;7.2.2. 方法区的基本理解7.2.3. HotSp…

无人机之基本结构篇

无人机&#xff08;Unmanned Aerial Vehicle, UAV&#xff09;作为一种无人驾驶的飞行器&#xff0c;其基本结构涵盖了多个关键组件&#xff0c;这些组件共同协作以实现无人机的自主飞行和执行各种任务。以下是无人机基本结构的详细解析&#xff1a; 一、飞机平台系统 机身&am…

vue2表单校验:添加自定义el-form表单校验规则

前言 在vue2表单校验&#xff1a;el-form表单绑定数组并使用rules进行校验_vue2 rules校验-CSDN博客中&#xff0c;使用form原生的rules对表单中每个控件的必填、格式等做了校验。但是保存时&#xff0c;除了验证每一个控件的输入合乎要求外&#xff0c;还需要验证控件之间的数…

SpringBoot集成kafka-生产者发送消息

springboot集成kafka发送消息 1、kafkaTemplate.send()方法1.1、springboot集成kafka发送消息Message对象消息1.2、springboot集成kafka发送ProducerRecord对象消息1.3、springboot集成kafka发送指定分区消息 2、kafkaTemplate.sendDefault()方法3、kafkaTemplate.send(...)和k…

WIN/MAC 图像处理软件Adobe Photoshop PS2024软件下载安装

目录 一、软件概述 1.1 基本信息 1.2 主要功能 二、系统要求 2.1 Windows 系统要求 2.2 macOS 系统要求 三、下载 四、使用教程 4.1 基本界面介绍 4.2 常用工具使用 4.3 进阶操作 一、软件概述 1.1 基本信息 Adobe Photoshop&#xff08;简称PS&#xff09;是一款…

springboot嵌入式数据库实践-H2内嵌数据库(文件、内存)

本文章记录笔者的嵌入式数据库简单实现&#xff0c; 记录简要的配置过程。自用文章&#xff0c;仅作参考。 目录 本文章记录笔者的嵌入式数据库简单实现&#xff0c; 记录简要的配置过程。自用文章&#xff0c;仅作参考。 嵌入式数据库 -------------------------------具…

16岁激活交学费银行卡需要本人实名电话卡,线下营业厅不给办,怎么办?

16岁激活交学费银行卡需要本人实名电话卡&#xff0c;线下营业厅不给办&#xff0c;怎么办&#xff1f; 话卡办理规定&#xff1a; 根据《民法典》和《电话用户真实身份信息登记规定》的相关要求&#xff0c;未满16周岁的用户通常需要在监护人的陪同下办理电话卡&#xff0c;并…

uniapp微信小程序 分享功能

uniapp https://zh.uniapp.dcloud.io/api/plugins/share.html#onshareappmessage export default {onShareAppMessage(res) {if (res.from button) {// 来自页面内分享按钮console.log(res.target)}return {title: 自定义分享标题,path: /pages/test/test?id123}} }需要再真机…

衡石科技BI的API如何授权文档解析

授权说明​ 授权模式​ 使用凭证式&#xff08;client credentials&#xff09;授权模式。 授权模式流程说明​ 第一步&#xff0c;A 应用在命令行向 B 发出请求。 第二步&#xff0c;B 网站验证通过以后&#xff0c;直接返回令牌。 授权模式结构说明​ 接口说明​ 获取a…

【贪心 决策包容性 】757. 设置交集大小至少为2

本文涉及知识点 贪心 决策包容性 LeetCode757. 设置交集大小至少为2 给你一个二维整数数组 intervals &#xff0c;其中 intervals[i] [starti, endi] 表示从 starti 到 endi 的所有整数&#xff0c;包括 starti 和 endi 。 包含集合 是一个名为 nums 的数组&#xff0c;并…

Quasar V2.16.4 新版发布,基于 Vue 3 的前端开发框架,一套代码发布到多端

Quasar 又发布新版本了&#xff0c;性能优秀的 Vue 组件开发框架&#xff0c;时隔3年再次推荐给大家。 早在2021年&#xff0c;我就写了一篇简单的文章向大家推荐了 Quasar 这款 Vue.js 开发框架&#xff0c;如今3年过去了&#xff0c;Quasar 发展得很好&#xff0c;更新频率依…

H5开发有哪些技巧?

随着现代社会的飞速发展&#xff0c;网页开发已经从传统的HTML、CSS、JavaScript往H5发展。H5也称为HTML5&#xff0c;可以理解为是HTML的升级版&#xff0c;具有更加优秀的性能、更加完善的功能和更加多样的体验。因其灵活性和跨平台特性&#xff0c;成为了各类移动应用和网页…

面试常问! transformer中dk的大小,以及为什么设成这样,维度,原文分析。

目录&#xff1a; 原文 &#xff1a;翻译&#xff1a;流程&#xff1a;原因&#xff1a; 原文(多头注意力部分) &#xff1a; 李沐b站论文精读 论文网盘下载&#xff1a;链接 提取码: vm3d 翻译&#xff1a; 在这项工作中&#xff0c;我们采用了 h8 个并行注意力层&#xff…

Linux远程管理—SSH协议

SSH协议是远程连接的安全性协议&#xff0c;该协议可以有效防止远程管理过程中的信息泄漏&#xff0c;是西安传输数据加密&#xff0c;能够防止DNS和IP欺骗&#xff0c;传输数据压缩&#xff0c;加快传输速度。 安全验证方法有口令验证和密钥验证两种实现手段&#xff0c;该协…