Vue组件化编程开发

news2025/7/18 14:08:41

目录

一.模块

二.组件 (快捷键< + 回车 生成单组件模板)

三.非单文件组件

四.单文件组件:


首先理解模块和组件的基本概念:

一.模块

1.理解:向外提供特定功能的js程序,一般就是一个js文件

2.为什么: js文件很多很复杂

3.作用:复用js, 简化js的编写,提高js运行效率

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

二.组件 (快捷键< + 回车 生成单组件模板)

组件的定义: 实现应用中局部功能代码资源的集合

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

解决传统js编写存在的问题:

1.依赖关系混乱,不好维护。

2.代码复用率不高。

 先看看非单文件组件的使用,以便于理解单组件开发的优势:

三.非单文件组件

1.基本使用:

Vue中使用组件的三大步骤:

一、定义组件(创建组件)           

二、注册组件

三、使用组件(写组件标签)

 一、如何定义一个组件?

        使用Vue.extend(options)创建,其中options和new Vue(options)时传入的那个options几          乎一样,但也有点区别;

        区别如下:

            1.el不要写,为什么? ——— 最终所有的组件都要经过一个vm的管理,由vm中的el                决定服务哪个容器。

             2.data必须写成函数,为什么? ———— 避免组件被复用时,数据存在引用关系。

                        备注:使用template可以配置组件结构。

二、如何注册组件?

         1.局部注册:靠new Vue的时候传入components选项

         2.全局注册:靠Vue.component('组件名',组件)

三、编写组件标签:(标签执行时会自动创建VueComponents实例)

           <school></school>

For example:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>基本使用</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 准备好一个容器-->
		<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>
</html>

 2.需要注意的点

1.关于组件名:

     一个单词组成:

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

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

     多个单词组成:

                          第一种写法(kebab-case命名):my-school

                          第二种写法(CamelCase命名):MySchool (需要Vue脚手架支持)

    备注:

               (1).组件名尽可能回避HTML中已有的元素名称,例如:h2、H2都不行。

               (2).可以使用name配置项指定组件在开发者工具中呈现的名字。

2.关于组件标签:

       第一种写法:<school></school>

       第二种写法:<school/>

       备注:不用使用脚手架时,<school/>会导致后续组件不能渲染。

3.一个简写方式:

          const school = Vue.extend(options) 可简写为:const school = options

3.关于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的实例对象,以后简称vc(也可称之为:组件实例对象)。

    Vue的实例对象,以后简称vm。

 

For exampel:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>VueComponent</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 准备好一个容器-->
		<div id="root">
			<school></school>
			<hello></hello>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false
		
		//定义school组件
		const school = Vue.extend({
			name:'school',
			template:`
				<div>
					<h2>学校名称:{{name}}</h2>	
					<h2>学校地址:{{address}}</h2>	
					<button @click="showName">点我提示学校名</button>
				</div>
			`,
			data(){
				return {
					name:'尚硅谷',
					address:'北京'
				}
			},
			methods: {
				showName(){
					console.log('showName',this)
				}
			},
		})

		const test = Vue.extend({
			template:`<span>atguigu</span>`
		})

		//定义hello组件
		const hello = Vue.extend({
			template:`
				<div>
					<h2>{{msg}}</h2>
					<test></test>	
				</div>
			`,
			data(){
				return {
					msg:'你好啊!'
				}
			},
			components:{test}
		})


		// console.log('@',school)
		// console.log('#',hello)

		//创建vm
		const vm = new Vue({
			el:'#root',
			components:{school,hello}
		})
	</script>
</html>

4.一个重要的内置关系

1.一个重要的内置关系:VueComponent.prototype.__proto__ === Vue.prototype

2.为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue原型上的属性、方法。

四.单文件组件:

1.单组件结构:

 .vue 文件 将文件分为了三部分

①结构<template>

②交互代码<script>

③样式<style>

 For example:

<template>
	<div class=".demo">
		<h2>学生姓名:{{name}}</h2>
		<h2>学生年龄:{{age}}</h2>
	</div>
</template>

<script>
	 export default {
		name:'Student',
		data(){
			return {
				name:'张三',
				age:18
			}
		}
	}
</script>
<style>
	.demo{
		background-color: orange;
	}
</style>

2.基本项目结构: 

在vue脚手架上操作时,一般有三个基础文件

①App.vue

②main.js

③index.html

结构如下:

 

其中

App.vue 用于集成所有组件:

<template>
	<div>
		<School></School>
		<Student></Student>
	</div>
</template>

<script>
	//引入School和Student组件
	import School from './School.vue'
	import Student from './Student.vue'

	export default {
		name:'App',
		components:{
			School,
			Student
		}
	}
</script>

main.js创建Vue实例,并指明挂载在哪, 作为入口

import App from './App.vue'

new Vue({
	el:'#root',
	template:`<App></App>`,
	components:{App},
})

index.html用于创建挂载所需要的容器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>练习一下单文件组件的语法</title>
	</head>
	<body>
		<!-- 准备一个容器 -->
		<div id="root"></div>
	</body>
</html>

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

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

相关文章

Mybatis-Plus+SpringBoot结合运用

目录 前言 一、创建Maven项目导入相关的依赖 二、在resources添加日志和连接数据库 1.日志文件(log4j.properties) 2.连接数据库&#xff08;application.properties&#xff09; 三、编写pojo &#xff08;注解编写get/set/tostring&#xff09; 四、UserMapper编写继承…

Fragment的生命周期

文章目录Fragment的生命周期Fragment的状态和回调运行状态暂停状态停止状态销毁状态回调方法附加的回调方法onAttach()onCreateView()onActivityCreated()onDestroyView()onDetach()Fragment完整的生命周期图Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,并…

c++实现图书管理系统v1.0

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录系统要求功能1.首页2.退出系统3.添加图书4.删除书籍5.查找书籍6.修改书籍信息7.显示所有图书8.查看书籍是否在书架上总代码收获系统要求 用c实现一个可以增删改查的…

商城项目环境准备 — docker安装kinaba和配置ik中文分词器

一、拉取kinaba镜像 docker pull kinaba:7.12.1二、启动kinaba容器 docker run -d \ --name kibana \ -e ELASTICSEARCH_HOSTShttp://es:9200 \ --networkes-net \ -p 5601:5601 \ kibana:7.12.1三、访问 输入http://ip:5601 ip&#xff1a;服务器端口 四、安装ik分词器 …

研究光度立体法阶段性小结和优化(可20ms获取4个2500*2000灰度图的Normal Map)。...

这个东西是我接触的第一个非2D方面的算法&#xff0c;到目前为止其实也没有完全搞定&#xff0c;不过可能短时间内也无法突破。先把能搞定的搞定吧。 这个东西也有一大堆参考资料&#xff0c;不过呢&#xff0c;搜来搜去其实也就那些同样的东西&#xff0c;个人觉得就属这个文章…

Java自幂数计算及其算法改进

文章目录1. 自幂数2.自幂数的个数3. 常规自幂数计算方法4.算法代码改进1. 自幂数 如果在一个固定的进制中&#xff0c;一个n位自然数等于自身各个数位上数字的n次幂之和&#xff0c;则称此数为自幂数。 例如&#xff1a;在十进制中&#xff0c;153是一个三位数&#xff0c;各个…

计算机网络4小时速成:网络层,虚电路和数据包服务,ipv4,ABC类地址,地址解析协议ARP,子网掩码,ICMP忘记控制报文协议,路由选择协议,路由器

计算机网络4小时速成&#xff1a;网络层&#xff0c;虚电路和数据包服务&#xff0c;ipv4,ABC类地址&#xff0c;地址解析协议ARP&#xff0c;子网掩码&#xff0c;ICMP忘记控制报文协议&#xff0c;路由选择协议&#xff0c;路由器 2022找工作是学历、能力和运气的超强结合体…

新闻管理系统(SpringBoot+Vue)

商丘工学院新闻网 1、前言 sqgxy-xxydz-news是在大四参加的web大赛的一个项目&#xff0c;与我的队友协同开发&#xff0c;在此过程中收获颇多。 2、介绍 商丘工学院新闻官网&#xff08;信息与电子工程学院&#xff09;包括前台新闻展示系统及后台管理系统&#xff0c;基于Sp…

九种常见UML图

我常用的UML图是 类图、用例图、序列图、状态图这4种。 1、类图 类图是面向对象系统建模最常见的图&#xff0c;是定义其他图的基础 类图主要用用来显示系统中的类&#xff0c;接口以及它们之间的静态结构和关系的一种静态模型 类图显示 集合的类、接口、关联、协作和约束&…

Shiro笔记03-与Spring Boot整合

框架整合 创建模块 创建一个Maven工程 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation…

生还是不生? SpringBoot3 版本有起飞前兆,最小依赖Java17!

一直以来&#xff0c;Java8都是Java社区心头的痛。因为它代表着以稳定性为主的企业管理层&#xff0c;与拥抱变化为主的底层码农层之间的、爱的魔力拉锯战。 不生&#xff01;少生&#xff01;成为各大厂心照不宣的选择。 现在&#xff0c;这种平衡或将打破。因为Java届的霸主…

Python3编程基础-变量与计算器

变量与计算器 简单计算器 下面来做一个简单计算器&#xff0c;完成普通计算器功能。 打开IDlE&#xff0c;输入以下脚本进行计算。 >>> 34 7 >>> 6-(8*2) -10 >>> (5*234)*(45) 396 >>> 每一行都是一个Python语句&#xff0c;如果可能的…

Java并发-为什么主线程结束了,程序却没有关闭呢?

守护线程与用户线程的定义及区别 Java 中的线程分为两类&#xff0c;分别为 daemon 线程&#xff08;守护线程&#xff09;和 user 线程&#xff08;用户线程&#xff09;。 在 JVM 启动时会调用 main 函数&#xff0c; main 函数所在的线程就是一个用户线程&#xff0c;其实…

TCP协议灵魂之问

先亮出这篇文章的思维导图: TCP 作为传输层的协议&#xff0c;是一个软件工程师素养的体现&#xff0c;也是面试中经常被问到的知识点。在此&#xff0c;我将 TCP 核心的一些问题梳理了一下&#xff0c;希望能帮到各位。 001. 能不能说一说 TCP 和 UDP 的区别&#xff1f; 首…

四十分钟带你玩儿转Python-OpenCV(一)

14天学习训练营导师课程&#xff1a; 李宁《Python Pygame游戏开发入门与实战》 李宁《计算机视觉OpenCV Python项目实战》1 李宁《计算机视觉OpenCV Python项目实战》2 李宁《计算机视觉OpenCV Python项目实战》3 OpenCV是一个基于BSD许可&#xff08;开源&#xff09;发行的跨…

基于keras 卷积神经外网络搭建的手写数字识别 完整代码+数据可直接运行

项目介绍: 适合新手入门学习代码数据很简洁 上结果: 主要的卷积神经网络: 卷积是指在滑动中提取特征的过程,可以形象地理解为用放大镜把每步都放大并且拍下来,再把拍下来的图片拼接成一个新的大图片的过程。 2D卷积是一个相当简单的操作: 我们先从一个小小的权重矩阵…

iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入(宽字节注入)

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 目录 系列文章目录 前言 第02关 字符型注入 1.源码分析 2.字符型宽字节注入 &#xff08;1&#xff09;渗透方法1&#xff1a; &#xff08;2&#xff09;渗透方法2&#xff1a; &am…

Git 分支管理详解

1.前言 我们先来说一个简单的案例吧&#xff0c;你们团队中有多个人再开发一下项目&#xff0c;一同事再开发一个新的功能&#xff0c;需要一周时间完成&#xff0c;他写了其中的30%还没有写完&#xff0c;如果他提 交了这个版本&#xff0c;那么团队中的其它人就不能继续开发…

记录:微星 GE63 屏轴断裂 之后。。。

2022/11/25 记录 微星 GE63 1070 笔记本&#xff0c;使用的第三年&#xff0c;已过保了一年&#xff0c;上周使用时&#xff0c;准备合上笔记本盖。啪一下&#xff0c;左侧屏轴断裂&#xff0c;B面翘起&#xff0c;A面左下角轴盖断了一截。 网上好多人都有类似的情况&#xff…

晶振在单片机中扮演着什么角色?晶振坏了单片机还能运行程序吗?

晶振坏了单片机还能运行程序吗&#xff1f;前言晶振是什么&#xff1f;单片机没有晶振可以运行程序吗&#xff1f;PCB中晶振电路的要求结语前言 今天突然想到一个问题&#xff0c;如果一个单片机的晶振坏了那单片机还能运行程序吗&#xff1f;带着这个问题我查询了很多的治疗发…