04-Vue技术栈之组件化编程

news2025/1/11 23:01:21

目录

  • 1、模块与组件、模块化与组件化
    • 1.1 模块
    • 1.2 组件
    • 1.3 模块化
    • 1.4 组件化
    • 1.5 传统方式编写应用
    • 1.6 组件方式编写应用
  • 2、非单文件组件
    • 2.1 基本使用
    • 2.2 几个注意点
    • 2.3 组件的嵌套
    • 2.4 VueComponent
    • 2.5 一个重要的内置关系
    • 2.6 总结
  • 3、单文件组件
    • 3.1 一个.vue 文件的组成(3 个部分)
    • 3.2 基本使用

1、模块与组件、模块化与组件化

1.1 模块

  1. 理解: 向外提供特定功能的 js 程序, 一般就是一个 js 文件
  2. 为什么: js 文件很多很复杂
  3. 作用: 复用 js, 简化 js 的编写, 提高 js 运行效率

1.2 组件

  1. 理解: 用来实现局部(特定)功能效果的代码集合(html/css/js/image……)
  2. 为什么: 一个界面的功能很复杂
  3. 作用: 复用编码, 简化项目编码, 提高运行效率

1.3 模块化

当应用中的 js 都以模块来编写的, 那这个应用就是一个模块化的应用

1.4 组件化

当应用中的功能都是多组件的方式来编写的, 那这个应用就是一个组件化的应用

1.5 传统方式编写应用

在这里插入图片描述

1.6 组件方式编写应用

在这里插入图片描述
在这里插入图片描述

2、非单文件组件

2.1 基本使用

Vue中使用组件的三大步骤:
一、定义组件(创建组件)
二、注册组件
三、使用组件(写组件标签)

  1. 如何定义一个组件?
    使用Vue.extend(options)创建,其中optionsnew Vue(options)时传入的那个options几乎一样,但也有点区别;
    区别如下:
    1.el不要写,为什么? ——— 最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器。
    2.data必须写成函数,为什么? ———— 避免组件被复用时,数据存在引用关系
    备注:使用template可以配置组件结构。

  2. 如何注册组件?

    1.局部注册:靠new Vue的时候传入components选项
    2.全局注册:靠Vue.component('组件名',组件)

  3. 编写组件标签:

    <school></school>
    

代码示例:

	<!-- 准备好一个容器-->
	<div id="root">
		<hello></hello>
		<hr>
		<h1>{{msg}}</h1>
		<hr>
		<!-- 第三步:编写组件标签 -->
		<school></school>
		<hr>
		<!-- 第三步:编写组件标签 -->
		<student></student>
	</div>

	<div id="root2">
		<hello></hello>
	</div>
</body>

<script type="text/javascript">
	Vue.config.productionTip = false

	//第一步:创建school组件
	const school = Vue.extend({
		template: `
				<div class="demo">
					<h2>学校名称:{{schoolName}}</h2>
					<h2>学校地址:{{address}}</h2>
					<button @click="showName">点我提示学校名</button>	
				</div>
			`,
		// el:'#root', //组件定义时,一定不要写el配置项,因为最终所有的组件都要被一个vm管理,由vm决定服务于哪个容器。
		data() {
			return {
				schoolName: '帝皇宫',
				address: '玄天大陆'
			}
		},
		methods: {
			showName() {
				alert(this.schoolName)
			}
		},
	})

	//第一步:创建student组件
	const student = Vue.extend({
		template: `
				<div>
					<h2>学生姓名:{{studentName}}</h2>
					<h2>学生年龄:{{age}}</h2>
				</div>
			`,
		data() {
			return {
				studentName: '东方青云',
				age: 18
			}
		}
	})

	//第一步:创建hello组件
	const hello = Vue.extend({
		template: `
				<div>	
					<h2>你好啊!{{name}}</h2>
				</div>
			`,
		data() {
			return {
				name: 'Tom'
			}
		}
	})

	//第二步:全局注册组件
	Vue.component('hello', hello)

	//创建vm
	new Vue({
		el: '#root',
		data: {
			msg: '你好啊!'
		},
		//第二步:注册组件(局部注册)
		components: {
			school,
			student
		}
	})

	new Vue({
		el: '#root2',
	})
</script>

2.2 几个注意点

  1. 关于组件名:

    • 一个单词组成:

      第一种写法(首字母小写):school
      第二种写法(首字母大写):School

    • 多个单词组成:

      第一种写法(kebab-case命名):my-school
      第二种写法(CamelCase命名):MySchool (需要Vue脚手架支持)

    备注:
    (1).组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。
    (2).可以使用name配置项指定组件在开发者工具中呈现的名字。

  • 关于组件标签:

    • 第一种写法:
    <school></school>
    
    • 第二种写法:
     <school/>//不用使用脚手架时,<school/>会导致后续组件不能渲染。
    
  1. 一个简写方式:
    const school = Vue.extend(options) 可简写为:const school = options

2.3 组件的嵌套

  • 代码示例:
<body>
	<!-- 准备好一个容器-->
	<div id="root">

	</div>
</body>

<script type="text/javascript">
	Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

	//定义student组件
	const student = Vue.extend({
		name: 'student',
		template: `
				<div>
					<h2>学生姓名:{{name}}</h2>	
					<h2>学生年龄:{{age}}</h2>	
				</div>
			`,
		data() {
			return {
				name: '东方青云',
				age: 18
			}
		}
	})

	//定义school组件
	const school = Vue.extend({
		name: 'school',
		template: `
				<div>
					<h2>学校名称:{{name}}</h2>	
					<h2>学校地址:{{address}}</h2>	
					<student></student>
				</div>
			`,
		data() {
			return {
				name: '帝皇宫',
				address: '云天大陆'
			}
		},
		//注册组件(局部)
		components: {
			student
		}
	})

	//定义hello组件
	const hello = Vue.extend({
		template: `<h1>{{msg}}</h1>`,
		data() {
			return {
				msg: '欢迎来到帝皇宫学习!'
			}
		}
	})

	//定义app组件
	const app = Vue.extend({
		template: `
				<div>	
					<hello></hello>
					<school></school>
				</div>
			`,
		components: {
			school,
			hello
		}
	})

	//创建vm
	new Vue({
		template: '<app></app>',
		el: '#root',
		//注册组件(局部)
		components: { app }
	})
</script>

  • 嵌套关系:

在这里插入图片描述

2.4 VueComponent

关于VueComponent:

  1. school组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的
  2. 我们只需要写<school/>或<school></school>,Vue解析时会帮我们创建school组件的实例对象,即Vue帮我们执行的:new VueComponent(options)
  3. 特别注意:每次调用Vue.extend,返回的都是一个全新的VueComponent!!!!
  4. 关于this指向:
    (1) 组件配置中:
    data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【VueComponent实例对象】。
    (2) new Vue(options)配置中:
    data函数、methods中的函数、watch中的函数、computed中的函数 它们的this均是【Vue实例对象】。
  5. VueComponent的实例对象也可称之为:组件实例对象

2.5 一个重要的内置关系

  1. 一个重要的内置关系:VueComponent.prototype.__proto__ === Vue.prototype
  2. 为什么要有这个关系:让组件实例对象可以访问到 Vue原型上的属性、方法

在这里插入图片描述

2.6 总结

  1. 模板编写没有提示
  2. 没有构建过程, 无法将 ES6 转换成 ES5
  3. 不支持组件的 CSS
  4. 真正开发中几乎不用

3、单文件组件

3.1 一个.vue 文件的组成(3 个部分)

    1. 模板页面
    <template>
    页面模板
    </template>
    2. JS 模块对象
    <script>
    export default {
    data() {
        return {};
    },
    methods: {},
    computed: {},
    components: {},
    };
    </script>
    3. 样式
    <style>
    样式定义
    </style>

3.2 基本使用

  1. 引入组件
  2. 映射成标签
  3. 使用组件标签

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

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

相关文章

常用排序算法汇总—Python版

一、选择排序 1. 原理&#xff1a; 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法&#xff0c;它的基本思路是将数组按顺序分成已排序部分和未排序部分&#xff0c;然后每次从未排序部分中选择出最小的元素&#xff0c;将其添加到已排序部分的末尾…

计算机网络|第三章:传输层

前文回顾&#xff1a;第二章&#xff1a;应用层 目录 &#x1f4da;概述和运输层服务 &#x1f407;运输层和网络层的关系 &#x1f407;因特网传输概述 &#x1f4da;多路复用和多路分解 &#x1f407;无连接的多路复用与多路分解 &#x1f407;面向连接的多路复用与多路…

【硬件】嵌入式电子设计基础之分析电路

电子技术&#xff08;electronics&#xff09;是我们研究科技产品的基石&#xff0c;本文章通过一系列简单且使用的实例&#xff0c;带领大家走进电子技术的世界&#xff0c;并通过对这些实例的分析&#xff0c;掌握其中的知识点和实用的电路分析设计技能。 本篇文章围绕着模拟…

三数之和(Java实现)

文章目录 思路1.暴力算法(超出时间限制)解题思路复杂度 2.双指针算法解题思路&#xff1a;注意点复杂度 Problem: 15. 三数之和 思路 1.暴力算法 2.双指针算法 1.暴力算法(超出时间限制) class Solution {public List<List<Integer>> threeSum(int[] nums) {// 检查…

使用TrieTree(字典树)来实现敏感词过滤

使用TrieTree&#xff08;字典树&#xff09;来实现敏感词过滤 1. 字典树定义 字典树&#xff08;TrieTree&#xff09;&#xff0c;是一种树形结构&#xff0c;典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串,如01字典树&#xff09;。…

Hive本地开发/学习环境配置

前提 hive依赖hadoop的相关组件&#xff0c;需要启动Hadoop的相关组件。 Hive 版本&#xff1a;3.1.3 Hadoop版本&#xff1a;3.3.4 hive-env.sh export HADOOP_HOME$HADOOP_HOME export HIVE_CONF_DIR/usr/local/Cellar/hive/3.1.3/libexec/conf export HIVE_AUX_JARS_PATH/…

micro-app的简单学习

本文承接上一篇手把手教你使用vue2搭建micro-app&#xff0c;对micro-app进行简单的认识与学习。 简述 因为上一篇只是对micro-app的搭建&#xff0c;并没有对具体的内容进行深入了解&#xff0c;所以本文是在上一篇文章代码的基础上对micro-app官网&#xff0c;的初步了解。…

Vue(标签属性:ref、配置项:props、混入mixin、插件、样式属性:scroped)

一、ref&#xff08;打标识&#xff09; 前面提及到了标签属性&#xff1a;keys 这里将了解ref&#xff1a;打标识 正常布置脚手架并创建入口文件main.js,引入组件 1. 可以给元素注册引用信息&#xff08;获取真实DOM&#xff09; 给一个按钮获取上方的dom的方法&#xff0c;方…

log4j2实现日志输出

引言 日志是我们在软件开发过程中非常重要的一个组成部分&#xff0c;它能够记录系统运行时的各种信息和异常&#xff0c;方便我们在需要的时候进行排查和调试。而Log4j2是目前最为流行的Java日志框架之一&#xff0c;它提供了丰富的日志输出方式和配置选项&#xff0c;可以满…

设计模式——装饰器模式(Decorator Pattern)

很久没有写博客了&#xff0c;最近也有很多事情要处理&#xff0c;也在努力的备考软件考试&#xff0c;正好模拟题中有一道关于装饰器模式的题&#xff0c;觉得还不错&#xff0c;所以特地写一篇文章希望能分享给小伙伴们。 装饰器模式的作用&#xff1a;允许向一个现有的对象…

vue3导入elcel表格并展示(使用xlsx插件+vite+element-plus)/js上传表格(js+xlsx)

表格内容(本博客演示的表格,这里其实可以更换任意表格,动态展示的) 安装插件xlsx npm install xlsx组件的所有代码(附解释) <script setup> import { ref } from "vue"; import * as XLSX from "xlsx"; // 把文件按照二进制进行读取 function read…

解密PyTorch动态计算图:打破深度学习束缚的秘密武器

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【C++】STL之priority_queue类源码剖析

目录 概述 算法 源码 PriorityQueue.h test.cpp 测试结果 概述 priority_queue&#xff1a;优先级队列&#xff0c;包含在头文件<queue>中 优先级队列类似于堆结构&#xff0c;优先级最高的元素被置为堆顶&#xff0c;最优先被弹出top()和删除pop() 优先级队列的…

Python凸包

文章目录 ConvexHullQG三维情况ConvexHull属性 ConvexHull ConvexHull是spatial中的一个类&#xff0c;主要功能是找到一组点的边缘&#xff0c;并做一个凸包。其必要的初始化参数为一个点集&#xff0c;点集格式为 n m n\times m nm维度的数组&#xff0c;n为点集中点的个数…

定位的特殊应用

注意&#xff1a;发生固定定位&#xff0c;绝对定位后&#xff0c;元素都变成了定位元素&#xff0c;默认高宽被内容撑开&#xff0c;则可以设置宽高&#xff1b;以下只针对绝对定位和固定定位的元素&#xff0c;不包括相对定位元素。 1.定位元素块的宽充满包含块 前提&#x…

封装建立-SMD封装

1. 看规格书&#xff0c;建立需要的焊盘&#xff0c;命名。注意padstack editor保存路径中不能有中文。 2.新建.dra工程&#xff0c;layout/pin 在里面筛选需要的焊盘。 3. 放置焊盘&#xff0c;需要计算精确坐标&#xff0c;allegro里command用x 0 0命令可以定位到原点。 4…

Python综合案例-学生数据可视化

近年来,数据分析和可视化已经成为了许多领域中的重要工具。在教育领域中,通过对学生的表现和行为进行数据分析和可视化,可以更好地了解学生的学习状态,发现问题、改进教学,并提高学生成绩。本文将介绍一个 Python 综合案例,使用 Pandas 和 Seaborn 库,对学生的数据进行清…

MySQL几种备份方式对比,你用对了吗?

各备份方法对比 备份数据的策略需要根据几种维度考虑 备份能承受最大丢失数据量 备份期间系统可以处于哪种情况&#xff08;不可用&#xff0c;部分可用&#xff0c;完全可用&#xff09; 数据恢复时长 需要恢复全量数据还是增量数据 备份数据的方法 逻辑备份&#xff1a;…

推荐算法实战项目:Deep Crossing 模型原理以及案例实战(附完整 Python 代码)

本文要介绍的Deep Crossing模型是由微软研究院在论文《Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features》中提出的&#xff0c;它主要是用来解决大规模特征自动组合问题&#xff0c;从而减轻或者避免手工进行特征组合的开销。 Deep Cross…

推荐算法实战项目:DCN 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由斯坦福大学联合Google的研究人员发表的论文《Deep & Cross Network for Ad Click Predictions》中提出的Deep&Cross模型&#xff0c;简称DCN。 DCN模型是Wide&Deep的改进版本&#xff0c;其中Deep部分的设计思路与Wide&Deep没有发生本质的变化…