【vue3】06-vue的组件化开发-脚手架创建项目

news2024/9/23 5:30:05

文章目录

  • Vue的组件化
    • 组件化开发
    • 注册组件的方式
      • vue全局组件
      • vue局部组件
    • Vue的开发模式
    • Vue CLI脚手架
      • 安装Vue CLI
      • 使用Vue CLI

Vue的组件化

  • Vue是一款前端框架,在这个框架中,组件化开发是非常重要的。
  • Vue的组件化就是将一个页面划分为多个独立的、可复用的组件,并通过组合这些组件来实现完整的页面功能。
  • 这种开发方式可以极大地提高代码的可读性和可维护性。

组件化开发

如果我们将一个页面中所有的处理逻辑全部放在一起,处理起来就会变得非
常复杂,而且不利于后续的管理以及扩展:

  • 但如果,我们将一个页面拆分成一个个小的功能块,每个功能块完成属于自己这部分独立的功能,那么之后整个页面的管理和维护就变得非常容易了;
  • 如果我们将一个个功能块拆分后,就可以像搭建积木一下来搭建我们的项目
    在这里插入图片描述

组件化是Vue、React、Angular的核心思想,也是我们后续学习的重点(包括以后实战项目):

  1. 前面我们的createApp函数传入了一个对象App,这个对象其实本质上就是一个组件,也是我们应用程序的根组件:

写法一:

    <script>

        const app = Vue.createApp({
            data() {
                return {
                    message: 'hello vue',
                    counter:0,
                    counter2:0,
                    content:""
                }
            },
            methods:{
			
			},

        })
        app.mount('#app')
    </script>

写法二:
(因为本质上就是一个根组件,所以我们可以这样来写)

<script>
  // 组件:根组件(App组件)
  const App = {
    data() {
      return {
        message: "Hello Vue",
      };
    },
  };

  const app = Vue.createApp(App);

  app.mount("#app");
</script>

  1. 组件化:
    (1)像上面这样书写,无论是data,模板还是methods这些所以东西都是写在了一起的。但如果一个应用程序所以东西都是写在一起的,这个组件就会越来越复杂,越来越难以维护
    (2) 组件化提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用;
  2. 所以任何的应用都会被抽象成一颗组件树

在这里插入图片描述

接下来,我们来学习一下在Vue中如何注册一个组件,以及之后如何使用这个注册后的组件。


注册组件的方式

vue全局组件

1. 全局组件基本使用流程

1.1 定义组件选项:

  • 组件选项是一个对象,包括数据、事件、模板等选项,它们共同描述了一个组件的属性、行为和呈现方式。下面是一个示例组件选项:
const myComponent = {
  data() {
    return {
      message: 'Hello, World!'
    }
  },
  template: '<div>{{ message }}</div>'
}

1.2 注册全局组件:

  • 在 Vue 应用的任何地方,都可以使用全局组件。要注册一个组件,需要使用 Vue的component()方法来完成。将组件选项传递给这个方法即可完成全局组件注册
  • 其中,第一个参数是组件名称,可以使用 kebab-case (短横线分隔)或 PascalCase(驼峰) 命名方式。第二个参数是组件选项,也可以是一个组件对象

第二个参数是组件选项示例:

    <script>
        // 1.组件:app根组件
        const APP = {}


        // 2.开发product-item的组件
        const productItem = {
                template:` 
                <h2>我是商品</h2>
                <div>商品图片</div>
                <div>商品价格:<span>$9.9</span></div>
                <p>商品描述信息,9.99秒杀</p>
		 	 `
        }
        // 3.创建app
        const app = Vue.createApp(APP);
        // 4.注册一个全局组件
        // app.component("组件名称",组件)
        app.component("product-item", productItem)
        app.mount('#app')
    </script>

第二个参数是组件对象示例:

    <script>
        // 1.组件:app根组件
        const APP = {}
        // 3.创建app
        const app = Vue.createApp(APP);
        // 4.注册一个全局组件
        // app.component("组件名称",组件对象)
        app.component("product-item", {
        	 template:` 
                <h2>我是商品</h2>
                <div>商品图片</div>
                <div>商品价格:<span>$9.9</span></div>
                <p>商品描述信息,9.99秒杀</p>
		 	 `
        })
        app.mount('#app')
    </script>

1.3 在模板中使用组件:

  • 注册完组件之后,就可以在任何模板中使用该组件。只需将组件名放在 HTML 标签中即可
    <div id="app">
          <!-- 使用product-item组件 -->
        <product-item></product-item>
          <!-- 使用product-item组件 -->
        <product-item></product-item>
          <!-- 使用product-item组件 -->
        <product-item></product-item>
    </div>

2. 全局组件中的逻辑

  • 我们组件本身也可以有自己的代码逻辑:比如自己的data、computed、methods等等,
  • 原有的根组件可以用的插值语法等API, 在创建出来的组件中同样是可以使用的
    <script>
        const APP = {}
        const app = Vue.createApp(APP);


        // 注册自己的组件:商品组件
        app.component("product-item",{
            template:`
				  <h2>商品标题:{{title}}</h2>
       			  <p>商品描述:{{des}}</p>
        		  <p>价格:{{price}}</p>
			`,
            data(){
                return{
                    title:"我是商品的动态标题",
                    des:"我是商品的动态描述",
                    price:"我是商品的动态价格"
                }
            },
            methods:{
                collect(){
                    console.log("这个商品被收藏了");
                }
            }
        })

        app.mount('#app')
    </script>
  • 当然为了便于书写也为了更符合开发的习惯,模板可以如下方式写在html中
<body>
    <div id="app">
        <product-item></product-item>
        <product-item></product-item>
        <product-item></product-item>
    </div>

    <template id="product">
        <div class="product">
        <h2>商品标题:{{title}}</h2>
        <p>商品描述:{{des}}</p>
        <p>价格:{{price}}</p>
        <button @click="collect">收藏</button>
        </div>
        
    </template>
    <script>
        const APP = {}
        const app = Vue.createApp(APP);


        // 注册自己的组件:商品组件
        app.component("product-item",{
            template:"#product",
            data(){
                return{
                    title:"我是商品的动态标题",
                    des:"我是商品的动态描述",
                    price:"我是商品的动态价格"
                }
            },
            methods:{
                collect(){
                    console.log("这个商品被收藏了");
                }
            }
        })
        app.mount('#app')
    </script>
</body>

vue局部组件

  • 全局组件往往是在应用程序一开始就会全局组件完成,那么就意味着如果某些组件我们并没有用到,也会一起被注册
  • 全局组件会占用全局空间,因此在创建大型应用时,尽可能使用局部组件来避免命名冲突和降低应用的复杂度
  • 在开发中, 我们百分之九十九使用的都是局部组件

1. 局部组件的基本使用步骤

1.1定义组件选项

  • 和全局组件一样,局部组件也需要定义组件选项,并将它们传递给 Vue.component() 方法来注册:
const myComponent = {
  data() {
    return {
      message: 'Hello, World!'
    }
  },
  template: '<div>{{ message }}</div>'
}

1.2 在父组件中注册局部组件

  • 在之前的App组件中,我们有data、computed、methods等选项了,事实上还可以有一个components选项
  • 该components选项对应的是一个对象,对象中的键值对是: 组件的名称: 组件对象
  • 局部组件需要在其父组件中注册,注册方法是在父组件的 components 选项中注册
  • 一般会在每个父组件中注册所需的局部组件,以保证组件的可重用性和独立性。

示例代码如下:
(在这个例子中,我们定义了一个名为 app 的父组件,使用 components 选项将 myComponent 和navBar注册为局部组件。)

const app = {
	data() {
	    return {
	                   
	    }
	},  
  components: {
      // "product-item":{
      //     template:"#product"
      // },

      // "nav-bar":{
      //     template:"#home-nav"
      // }
    'my-component': myComponent
     "nav-bar":navBar
  }
}

1.3 在父组件中使用局部组件

  • 注册完组件之后,就可以在父组件的模板中使用该组件。在模板中,只需将组件名放在 HTML 标签中即可,与全局组件的使用方法相同:
    <div id="app">
		<my-component></my-component>
		<my-component>
	<!-- <nav-bar></nav-bar> 无法使用,因为product-item里没有局部注册navbar,
	只在根组件里局部注册,所以只有它能使用-->
			<nav-bar></nav-bar>
		</my-component>
    </div>

    <template id="my-component">
            <h2>我是商品</h2>
            <div>商品图片</div>
            <div>商品价格:<span>$9.9</span></div>
            <p>商品描述信息,9.99秒杀</p>
    </template>
        <template id="nav-bar">
            <h2>我是navbar内容</h2>
    </template>
  • 当父组件渲染模板时,会自动将这个标签转换为对应的局部组件。所有 my-component
    标签都将被替换为组件的模板,同时也会绑定组件的数据和方法。

Vue的开发模式

上面我们学习了如何注册全局组件, 局部组件

  • 但是存在一个问题, 一个组件的所有代码都是放在一个html文件的, 无论我们如何优化代码, 代码都会显得很繁琐,
  • 接下来我们学习Vue的开发模式, 可以很好的解决这个问题

目前我们使用vue的过程都是在html文件中,通过template编写自己的模板、脚本逻辑、样式等。

但是随着项目越来越复杂,我们会采用组件化的方式来进行开发:

  • 这就意味着每个组件都会有自己的模板、脚本逻辑、样式等
  • 当然我们依然可以把它们抽离到单独的js、css文件中,但是它们还是会分离开来;
  • 也包括我们的script是在一个全局的作用域下,很容易出现命名冲突的问题;
  • 在我们编写代码完成之后,依然需要通过工具对代码进行构建、优化

所以在真实开发中,我们可以通过一个后缀名为 .vuesingle-file components (单文件组件) 来解决,并且可以使用webpack或者vite或者rollup等构建工具来对其进行处理。


单文件组件(Single File Components)是 Vue 中一种组件开发模式,它将 HTML 模板、CSS 样式和 JavaScript 代码合并到一个文件中,可以方便地进行组件的编写和维护。

单文件组件的开发模式包含了以下几个方面:

1. 模板语法

  • 单文件组件的 HTML 模板使用 Vue 的模板语法,包括插值、指令和事件绑定等。例如,可以使用 {{ }} 来插入动态数据,使用 v-if 来控制元素的显示与隐藏,使用 @click 来绑定事件等。

2. 样式处理

  • 单文件组件的 CSS 样式可以使用普通的 CSS 语法,并且可以通过 scoped 属性来限定样式的作用域。在 scoped 模式下,样式只会作用于当前组件中的元素,并不会影响到其他组件中的样式。

3. 组件脚本

  • 单文件组件的 JavaScript 代码可以使用 ES6 语法进行编写,在组件中定义组件名、数据、计算属性、方法和生命周期钩子等。同时,也可以通过 import 和 export 等语法来进行组件之间的模块化开发和复用。

4. 组件导出

  • 单文件组件需要使用 export default 语法来导出组件选项,从而使得其他组件可以导入和使用该组件。例如,可以使用 import来导入组件,并在其他组件中进行注册和使用。

单文件组件示例:

在一个.vue文件中,template中定义了组件的DOM结构,script中定义了组件的行为逻辑和数据,style中定义了组件的样式。该组件渲染出来的内容将会是一个包含一段文本和一个按钮的div元素,在点击按钮之后,文本内容会变成“New Message!”。

<template>
  <div>
    <p>{{ message }}</p>
    <button v-on:click="handleChangeMessage">Change Message</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: "Hello World!",
    };
  },
  methods: {
    handleChangeMessage() {
      this.message = "New Message!";
    },
  },
}
</script>

<style>
p {
  font-size: 18px;
  font-weight: bold;
}
</style>

如果我们想要使用这一单文件组件(SFC)的.vue文件,比较常见的是两种方式:

  • 方式一:使用Vue CLI来创建项目,项目会默认帮助我们配置好所有的配置选项,可以在其中直接使用.vue文件
  • 方式二:自己使用webpack或rollup或vite这类打包工具,对其进行打包处理;

无论是后期我们做项目,还是在公司进行开发,通常都会采用Vue CLI的方式来完成

Vue CLI脚手架

什么是Vue CLI脚手架?

  • Vue CLI是Vue.js官方提供的一款用于快速构建Vue.js项目的脚手架工具,能够帮助开发者快速搭建Vue.js开发环境、生成Vue.js项目、管理Vue.js插件和依赖等。
  • 所以在真实开发中,我们通常会使用脚手架来创建一个项目,Vue的项目我们使用的就是Vue的脚手架;
  • CLI是Command-Line Interface, 翻译为命令行界面;
  • Vue CLI已经内置了webpack相关的配置,我们不需要从零来配置;

安装Vue CLI

  1. 安装Node.js:首先需确保本地已安装Node.js环境,可以在终端输入node -vnpm -v来检查是否已经安装。
  2. 全局安装Vue CLI:在终端输入以下命令即可全局安装Vue CLI:
						npm install -g @vue/cli
  1. 检查是否安装成功:输入以下命令,如果成功安装,会显示Vue CLI的版本信息:
							vue --version

使用Vue CLI

  1. 创建一个新项目:在终端中输入vue create my-project来创建一个新的Vue.js项目,其中my-project是你想要创建的项目名称。

  2. 配置项目选项:在创建项目的过程中,会让你选择需要安装的插件以及一些其他的项目配置选项。

  3. 启动开发服务器:在项目目录中运行npm run serve命令即可启动开发服务器,然后就可以在本地浏览器中预览应用程序了。

  4. 构建生产版本:在项目目录中运行npm run build命令即可构建生产版本,生成的文件都会存放在dist目录下。

  5. 其他常用命令:除了以上命令之外,Vue CLI还提供了其它一些常用的命令,例如npm run lint可以检查代码的语法和规范,npm run test可以运行测试脚本。

Vue CLi创建出来的项目目录结构如下:
在这里插入图片描述

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

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

相关文章

LeetCode5. 最长回文子串

写在前面&#xff1a; 题目链接&#xff1a;LeetCode5. 最长回文子串 编程语言&#xff1a;C 题目难度&#xff1a;中等 一、题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例…

算力256TOPS,典型功耗35W,存算一体芯片杀入智能驾驶

作者 | 张祥威 编辑 | 德新 国产智驾芯片有了新玩家 “最高物理算力256 TOPS&#xff0c;典型功耗35W&#xff0c;基于12nm制程工艺。” 5月10日&#xff0c;后摩智能发布首款基于存算一体架构的智驾芯片——鸿途™H30&#xff0c;并公布上述关键指标。 算力、数据和算法&am…

单例模式的饿汉和懒汉写法(基于C++)

目录 单例模式例程饿汉懒汉 对比函数调用线程安全总结 单例模式 单例模式确保一个类只有一个实例&#xff0c;并提供全局访问点。这样可以避免在系统中出现多个相同的对象&#xff0c;从而提高系统的性能和可维护性。 单例模式的实现包括饿汉和懒汉&#xff0c;下面介绍C中这两…

操作系统基础知识之处理器性能方程指标(包含阿达姆定律、CPI、Clock cycle time等)

计算机设计人员通过持续时间或速率来指代时钟周期的时间。程序的 CPU 时间可以用两种方式表示&#xff1a; CPU 时间程序的 CPU 时钟周期 / 时钟频率 除了执行程序所需的时钟周期数外&#xff0c;我们还可以计算执行的指令数。 如果我们知道时钟周期数和指令数&#xff0c;就…

金融学第二版笔记第一章1.1

第1部分 金融和金融体系 第一章金融学 1.1 一、 对金融学进行界定 1.金融 金融是货币流通、信用活动及与之相关的经济行为的总称。 简言之&#xff0c;就是货币资金的融通。一般是指以银行、证券市场等为中心的货币流通和信用调节活动&#xff0c;包括货币的发行和流通、存…

转置卷积(一) 搞懂转置卷积的计算

搞懂转置卷积的计算 0、参考文档1、转置卷积是什么&#xff1f;1.1 定义1.2 需要注意 2、转置卷积的计算2.1 从最简单的开始2.2 考虑stride2.3 考虑padding2.4 考虑dilation 3 转置卷积的加速 文章首发于https://zhaodongyu-ak47.github.io/Transposed_Convolution/ 最近做了一…

数据结构入门-二叉树

树的概念及结构 树的概念 树的一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树&#xff0c;也就是说它树根朝上&#xff0c;而叶子朝下。 有一个特殊的节点&#xff…

Web安全行业:零基础学习网络安全需要掌握哪些知识?(附系统路线+工具笔记)

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 一、网络安全行业特点 行业发展空间大&#xff0c;岗位非常多 网络安全行业产业以来&#xff0c;随即新增加了几十个…

单元测试 - 集成H2 Dao测测试

SpringBoot 2.7、Mybatis plus、H2 1. pom引入h2 <dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>2.1.214</version> </dependency> 2. 配置h2数据源 & mapper路径 spring:datas…

地狱级的字节跳动面试,6年测开的我被按在地上摩擦.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…

( 位运算 ) 260. 只出现一次的数字 III ——【Leetcode每日一题】

❓260. 只出现一次的数字 III 难度&#xff1a;中等 给你一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额…

精炼计算机网络——数据链路层(一)

文章目录 前言3.1 数据链路和帧3.1.1 数据链路和帧3.1.2 三个基本问题 总结 前言 上篇文章&#xff0c;我们一同学完了物理层的全部内容&#xff0c;在本篇文章中&#xff0c;我们初步学习数据链路层&#xff0c;理解数据链路和帧的相应概念&#xff0c;知晓封装成帧&#xff…

信号完整性分析基础知识之传输线和反射(五):较短阻抗不连续的传输线、残桩和末端容性负载引起的反射

首先来一首定场诗&#xff1a;难难难&#xff0c;道德玄&#xff0c;不对知音不可谈。对了知音谈几句&#xff0c;不对知音枉费舌尖。 较短不连续点引起的反射 很多时候&#xff0c;板载走线的宽度必须要收窄&#xff0c;特别是经过PF区域或者拥挤区域。如果传输线的某一小段…

eSIM证书要求-证书验证-EID

SM-DP 和 SM-DS 应该验证 EUM 和 eUICC 证书中限制的 IIN 和 EID 的一致性&#xff08;参见第 4.5.2.1.0.2 和 4.5.2.1.0.3 节&#xff09;&#xff0c;并考虑 SGP.29 [ 89]。 根据 SGP.29 [89] 颁发的 EID 没有 SGP.02 [2] 中定义的 8 位 IIN。 相反&#xff0c;它们具有可变长…

【计算机视觉 | Python】十个 Python 图像处理工具,建议点赞收藏

文章目录 一、前言二、常见的库2.1 scikit-image2.2 NumPy2.3 SciPy2.4 PIL / Pillow2.5 OpenCV-Python2.6 SimpleCV2.7 Mahotas2.8 SimpleITK2.9 pgmagick2.10 Pycairo 一、前言 这些 Python 库提供了一种简单直观的方法来转换图像并理解底层数据。 今天的世界充满了数据&am…

linux【网络编程】之UDP网络程序模拟实现

linux【网络编程】之UDP网络程序模拟实现 一、开发环境二、服务端实现2.1 接口认识2.1.1 socket创建网络通信套接字2.1.2 bind&#xff1a;绑定Ip和端口号2.1.3 sockaddr_in结构体2.1.4 IP地址转换函数&#xff1a;inet_addr、inet_ntoa2.1.5 recvfrom&#xff1a;读取数据 2.2…

大语言模型进化树重磅发布,感慨技术方向选择的残酷,文末有彩蛋

文 / 高扬&#xff08;微信公众号&#xff1a;量子论&#xff09; 今天说点有深度的内容。五一假期&#xff0c;学习了一篇论文《Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond》。 这篇论文来自 Amazon 以及 Texas A&M University 研究团队&…

【2023 · CANN训练营第一季】应用开发深入讲解——第五章 端到端案例讲解

学习资源 样例介绍 使用DVPP加速预处理网络输入&#xff0c;并通过模型转换使能静态AIPP功能&#xff0c;使能AIPP功能后&#xff0c;YUV420SP_U8格式图片转化为RGB&#xff0c;然后减均值和归一化操作&#xff0c;并将该信息固化到转换后的离线模型中&#xff0c;对ResNet50…

传统IDC服务器迁移上云流程

上云是趋势&#xff0c;越来越多企业的IDC服务器选择迁移上云&#xff0c;迁移上云的方式有很多&#xff0c;阿里云提供服务器迁移中心SMC来帮助用户迁移上云。使用SMC服务器迁移中心&#xff0c;将您的源服务器方便快捷地迁移至阿里云&#xff0c;支持的迁移源类型包括IDC服务…

【Java EE 初阶】锁策略以及CAS问题

目录 1.常见的锁策略 1.乐观锁 vs 悲观锁 2.读写锁 3.重量级锁 vs 轻量级锁 4.自旋锁&#xff08;Spin Lock&#xff09; 5.公平锁 vs 非公平锁 6.可重入锁 vs 不可重入锁 7.Synchronized实现了哪些锁策略&#xff1f; 1.是乐观锁也是悲观锁 2.既是轻量级锁也是重量级…