Vue.js组件编程的知识要点

news2024/12/22 19:37:07

  在C/S编程中,对程序员来说,组件编程是一个不能忽视或者越过的技术能力,特别是自定义的组件编程以及构建基础组件库。虽然组件编程不是必须的,全部使用系统或者别人的组件(控件)也可以完成系统的开发,但是对于略微复杂一些的项目,结合团队开发,熟练掌握组件编程技术就是对一个程序员最起码的要求了。

  从代码的复用性来看,组件技术可以提高开发效率,增加项目开发的灵活性。

  去年学习了LayUI和EasyUI,LayUI真是挺好的,可惜面临着淘汰了。现在前端主流的开发框架有很多,比如Vue、React、BootStrap等,今年打算学习使用Vue。

  学过基础语法后,首先要掌握的就是组件技术编程。

  昨天进行了第一次学习,今天进行总结。

  容易踩的坑:
  (1)组件的名称中最好不要有大写字母;
  (2)template定义为ID的时候最好写在{}里面的最前面。
1、定义一个组件
  (1)组件当中的data定义为函数(方法);
  (2)组件之间的数据是独立的,相互之间不受影响;
  (3)更新组件内容后,所有的组件实例也会同步进行更新;
  (4)组件对象的内容可以单独定义,注册时传入内容对象即可。

  网页完整演示代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue的组件</title>
		<!--引入Vue.js组件库-->
		<script src="./js/vue2.js"></script>
	</head>
	<body>
		<div id="app1">
			<mytitle></mytitle>
			<mybutton1></mybutton1>
			{{msg}}
			<mybutton2></mybutton2>
		</div>
		<br>
		<div id="app2">
			<minetitle></minetitle>
			<mybutton1></mybutton1>
			{{msg}}
			<mybutton2></mybutton2>
		</div>
		<template id="minetitle">
			<div>
				<h1 style="color: blueviolet;">
					标题组件
				</h1>
				<button>按钮</button>
			</div>
		</template>
		<script type="text/javascript">
			var mytitle={
				template:'<h1 style="color:red">标题组件</h1>'
			};

			var mytitle2={
				template:"#minetitle"
			};

			var btn={
				data(){
					return { count:0 }
				},
				template:`<div><button @click="count++">按钮点击:{{count}}</button></div>`
			};
			
			Vue.component("mybutton1",{
				data(){
					return { count:0 }
				},
				template:`<div><button @click="count++">按钮点击:{{count}}</button></div>`
			});

			Vue.component("mybutton2",btn);

			var vm1=new Vue({
				el:"#app1",
				components:{
					mytitle:mytitle
				},
				data:{
					msg:"Vue componet"
				}
			});

			var vm2=new Vue({
				el:"#app2",
				components:{
					minetitle:mytitle2
				},
				data:{
					msg:"Vue componet"
				}
			});
		</script>
	</body>
</html>

  显示效果:

2、组件的注册
  (1)全局注册:使用Vue.componet(),作用范围是全局或者多个Vue实例,在实例之外进行注册;
  (2)局部注册:在实例中使用componets属性进行注册

  网页完整演示代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue的组件</title>
		<!--引入Vue.js组件库-->
		<script src="./js/vue2.js"></script>
	</head>
	<body>
		<div id="app">
			<mytitle titleinfo="标签名称" btnname="按钮名称1"></mytitle>
			<br>
			<mybutton1 buttonname="按钮名称2"></mybutton1>
		</div>
		
		<template id="minetitle">
			<div>
				<h1 style="color: blueviolet;">
					{{titleinfo}}
				</h1>
				<button @click="count++">{{btnname}}  点击:{{count}}</button>
			</div>
		</template>
		<script type="text/javascript">
			var Mytitle={
				data(){
					return { count:0 }
				},
				template:"#minetitle",
				props:['titleinfo','btnname']
			};
			
			Vue.component("mybutton1",{
				data(){
					return { count:0 }
				},
				template:`<div><button @click="count++">{{buttonname}}  点击:{{count}}</button></div>`,
				props:['buttonname']
			});

			var vm=new Vue({
				el:"#app",
				components:{
					mytitle:Mytitle
				}
			});
		</script>
	</body>
</html>

  显示效果:

 

3、template模板
  (1)可以把组件的定义内容写在html当中,然后通过定义对象的ID值与实例进行绑定;
  (2)在组件模板下只能有唯一的div根标签。

4、组件的通讯
  (1)父组件与子组件之间的通讯:父组件传递参数到子组件,通过props,值为数组;
  (2)父组件与子组件之间的通讯:子组件传递参数到父组件,通过emit,就是子组件调用父组件中定义的方法,注意参数传递;

  完整的网页代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue的组件</title>
		<!--引入Vue.js组件库-->
		<script src="./js/vue2.js"></script>
	</head>
	<body>
		<div id="app">
			<myparent></myparent>
		</div>
		
		<template id="child">
			<div>
				<input type="text" v-model="childmsg">
				<button @click="childclick">发送消息</button>
			</div>
		</template>

		<template id="parent">
			<div>
				<mychild @childclickfunc="parentfunc"></mychild>
				<p>子组件的消息:{{parentmsg}}</p>
			</div>
		</template>
		
		<script type="text/javascript">		
			Vue.component("mychild",{
				template:"#child",
				data(){
					return { childmsg:'1231' }
				},
				methods:{
					childclick(){
						this.$emit('childclickfunc',this.childmsg);
					}
				}
			});

			Vue.component("myparent",{
				template:"#parent",
				data(){
					return { parentmsg:'' }
				},
				methods:{
					parentfunc(str){
						this.parentmsg=str;
					}
				}
			});

			var vm=new Vue({
				el:"#app"
			});
		</script>
	</body>
</html>

  显示效果:

  (3)平行组件之间的通讯,通过emit结合$refs进行。    

  完整的网页代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Vue的组件</title>
		<!--引入Vue.js组件库-->
		<script src="./js/vue2.js"></script>
	</head>
	<body>
		<div id="app">
			<myparent></myparent>
		</div>
		
		<template id="child">
			<div>
				<input type="text" v-model="childmsg">
				<button @click="childclick">发送消息</button>
			</div>
		</template>

		<template id="parent">
			<div>
				<mychild @childclickfunc="parentfunc"></mychild>
				<p>子组件的消息:{{parentmsg}}</p>
			</div>
		</template>
		
		<script type="text/javascript">		
			Vue.component("mychild",{
				template:"#child",
				data(){
					return { childmsg:'1231' }
				},
				methods:{
					childclick(){
						this.$emit('childclickfunc',this.childmsg);
					}
				}
			});

			Vue.component("myparent",{
				template:"#parent",
				data(){
					return { parentmsg:'' }
				},
				methods:{
					parentfunc(str){
						this.parentmsg=str;
					}
				}
			});

			var vm=new Vue({
				el:"#app"
			});
		</script>
	</body>
</html>

  显示效果:

  上面最重要的内容就是组件之间的消息传递,这个与C/S下类似,比如props参数传递是数组,包含的不仅就是一个变量,可以是对象,平行组件的参数传递与父子组件之间的信息传递方式也类同,C/S和B/S在编程理念上是相通的,从这点出发掌握B/S下的组件编程就比较容易了。

  后面再进一步地学习。

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

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

相关文章

使用Python根据原始Excel表格批量生成目标Excel表格

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤亭台六七座&#xff0c;八九十枝花。大家好&#xff0c;我是Python进阶者。一、前言前几天在帮助粉丝解决问题的时候&#xff0c;遇到一个简单的小需求&#…

程序员如何通过兼职赚钱?有哪些渠道?

程序员的工资是没有网上说的那么夸张。 就我自己来说&#xff0c;在刚刚工作的那几年&#xff0c;月薪没有超过1万块钱。但是刚刚来到大城市&#xff0c;这点工资连我交房租都不够&#xff0c;生存都成了问题。于是我开始考虑进行兼职&#xff0c;虽然在最开始的几个月也只能有…

(Week 11)综合复习(C++,图论,动态规划,搜索)

目录汤姆斯的天堂梦&#xff08;C&#xff0c;Dijkstra&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解题思路&#xff1a;[蓝桥杯 2022 国 A] 环境治理&#xff08;C&#xff0c;Floyd&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输…

工控安全—工控常见协议识别

文章目录一、Nmap常见参数介绍二、工控常见协议识别三、工控设备指纹识别3.1 S73.2 Modbus3.3 IEC 60870-5-1043.4 DNP33.5 EtherNet/IP3.6 BACnet3.7 Tridium Niagara Fox3.8 Crimson V33.9 OMRON FINS3.10 PCWorx3.11 ProConOs3.12 MELSEC-Q四、测试一、Nmap常见参数介绍 -s…

STM32F411CE驱动Xbox摇杆

外观 引脚说明和原理 GND-GND 5V-5V VRX-ADC1通道1 VRX-ADC1通道2 SW独立按键-单片机的输入检测 本质上这个遥感就是集成了一个按键和两个电位器&#xff0c;遥感转动改变电位器也会转动&#xff0c;电压输出的值也就不一样&#xff0c;通过检测数值可自定义的做出判断&a…

linux发送tcp/udp请求

本文章介绍下通过nc工具和iperf工具&#xff0c;发送tcp/udp请求一、nc工具&#xff08;netcat工具&#xff09;这个工具linux系统默认是自带的&#xff0c;以下是命令的常用参数1.1 发送tcp请求在服务端监听端口nc -l port客户端连接并发送请求nc -v host port在服务端收到了信…

javaWeb 会话和跟踪

会话 用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪 HTTP协议是无状态的&#xff0c;每次浏览器向服务器请求时&#xff0c;服务器都会将该请求视…

kafka消费者API

kafka的消费方式 pull&#xff08;拉模式&#xff09; 消费者采用从broker中主动拉去数据 kafka采用这种方式 push&#xff08;推模式&#xff09; kafka没有采用这种方式&#xff0c;因为由broker决定消费发送速率。很难适应所有消费者 pull模式不足之处是&#xff0c;如…

Linux 的 Vim,gcc,makefile 的使用

坚持看完&#xff0c;结尾有思维导图总结 这里写目录标题vimvim的安装vim的配置vim 的使用vim 的三种模式三种模式对应的命令通用命令模式底行模式gcc 和 g编译和执行预编译编译汇编链接过程make总结vim Vim 是Linux 中使用的编辑器&#xff0c;一般的程序要经历一个过程才能运…

Codeforces Round #841 (Div. 2) and Divide by Zero 2022(A~E)

A. Joey Takes Money给出一个序列a&#xff0c;每次操作可以选择两个数&#xff0c;将两个数分别改成与原数乘积相同的两个数&#xff0c;问最后得到的最大的数组和是多少。思路&#xff1a;乘积一定&#xff0c;和最大一定是与1相乘。则整个数组的积与n - 1个1的和就是最大值。…

探索云原生技术之容器编排引擎-Kubernetes/K8S详解(7)

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

缓存(redis)与数据库(MYSQL)数据一致性问题

在MYSQL数据库集文章中&#xff0c;仔细的学习了一些MYSQL数据库的知识。但是&#xff0c;随着我们的业务越来越好&#xff0c;那么我们不可能直接去操作MYSQL数据库。因为直接去操作MYSQL终究会有比较多的I/O操作&#xff0c;而使整个系统的性能最终受到数据库I/O的制约而无法…

教外篇(6):C++ qrencode 实现二维码生成

系列文章目录 文章目录 系列文章目录前言一、qrencode库的基本使用二、BMP图片生成原理三、二维码生成四、放大图像、解决编码问题前言 该系列教程目录与说明可以查看这篇文章::C/C++教程 本文主要介绍如何使用C++来实现二维码的生成,使用到了开源库:qrencode 代码生成结…

C++入门--vector

目录 vector的介绍 vector的使用 对象的定义 遍历 reserve与resize insert与erase 迭代器失效 vector的模拟实现 vector的介绍&#xff1a; vector是表示可变大小数组的序列容器。 vector的使用&#xff1a; 对象的定义&#xff1a; void test_vector1() {vector<int…

ZYNQ图像-腐蚀膨胀笔记

大磊fpga 腐蚀 下图从左到右依次为a&#xff0c;b&#xff0c;c step1&#xff1a;将b中的黄色十字架在a中遍历 step2&#xff1a;当b的黄色方格在a中 没有碰到白色方格 时输出中心坐标 step3&#xff1a;将step2中所有输出的坐标涂成黄色&#xff0c;得出c图 膨胀 step1…

Redhat 7 安装 iftop软件

1.关闭subscription-manager vi /etc/yum/pluginconf.d/subscription-manager.conf enable 0 2.通过浏览器下载Centis-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3.上传至/etc/yum.repos.d/ 4.修改Centos-7.repo文件 #cd /etc/yum.repos.d/ #ls #vim CentOS…

怎么看电脑是32位还是64位?超级简单的方法!

熟悉计算机的朋友都知道&#xff0c;电脑系统可以分为32位和64位系统。它们之间有什么区别&#xff1f;它们支持不同的内存&#xff1a;32位操作系统最多支持4G内存&#xff0c;但64位系统可以支持4G、8G、16G、32G、64G、128G、256G等。兼容软件也不同&#xff1a;32位只支持3…

老照片修复方法是什么?这篇文章来告诉你

我们每年回老家时&#xff0c;都喜欢看看以前的老物件&#xff0c;尤其是照片&#xff0c;因为它承载了我们一代又一代人的回忆&#xff0c;不管过去了多久&#xff0c;家里的长辈拿到一张照片时&#xff0c;都可以准确的说出当时在哪里&#xff1f;在做什么&#xff1f;由此引…

基于python和cv2、pytorch实现的车牌定位、字符分割、字符识别项目

问题描述车牌的检测和识别的应用非常广泛&#xff0c;比如交通违章车牌追踪&#xff0c;小区或地下车库门禁。在对车牌识别和检测的过程中&#xff0c;因为车牌往往是规整的矩形&#xff0c;长宽比相对固定&#xff0c;色调纹理相对固定&#xff0c;常用的方法有&#xff1a;基…

linux C -- 内存管理

链接: linux C学习目录 linux C 共享内存机制共享内存物理位置shared memory常用函数编程模型范例write.cread.c修改参数实验共享内存 二个或者多个进程,共享同一块由系统内核负责维护的内部内存区域其地址空间通常被映射到堆和栈之间无需复制信息,最快的一种IPC机制需要考虑同…