当前位置: 首页 > news >正文

Vue中组件到底是什么

1.先说结论:

Vue中组件本质是一个名为VueComponent的构造函数,且不是程序员定义的,是Vue.extend生成的。

2.我们使用组件时发生了什么?
比如定义了一个school,然后在页面上使用它
我们只需要写 < school/ > 或< school >< /school>,Vue解析时会帮我们创建school组件的实例对象,即Vue帮我们执行的:new VueComponent(options)。

3.实际代码,我们定义一个school组件,然后在页面中打印出来。

<!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>
		</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>`
		})
	    console.log('@',school)
		//创建vm
		const vm = new Vue({
			el:'#root',
			components:{school,hello}
		})
	</script>
</html>

打印结果如下,是一个VueComponent构造函数:
在这里插入图片描述
我们也可以点进去看一下源码

在这里插入图片描述
我们使用组件时如何证明它执行了new VueComponent()操作?
我们直接在源码中加一句代码:
在这里插入图片描述
首先我们在代码中只定义组件,并不使用。页面中只有打印出school,相当于前面说的school组件本质是个VueComponent构造函数,但是并未执行。
在这里插入图片描述
然后我们在页面中使用school组件,打印结果如下:

在这里插入图片描述
4.vm(Vue实例)和组件的关系,我们直接打印vm。

console.log(vm);

在这里插入图片描述
我们发现有个chilren属性,是个数组,展开之后发现是school对应的VueComponent实例对象
在这里插入图片描述

相关文章:

  • 【数据结构】单链表的实现
  • HDFS黑名单退役服务器
  • 蓝桥杯第五天刷题
  • Java9-17新特性
  • Python每日一练(20230309)
  • 【满分】【华为OD机试真题2023 JAVA】最多几个直角三角形
  • html实现浪漫的爱情日记(附源码)
  • Visual Studio Code 1.76 发布
  • 嵌入式软件开发之Linux 磁盘管理
  • Pytorch机器学习(八)—— YOLOV5中NMS非极大值抑制与DIOU-NMS等改进
  • 出道即封神的ChatGPT,现在怎么样了?
  • UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白
  • 朋友去华为面试,轻松拿到26K的Offer,羡慕了......
  • CPU平均负载高问题定位分析
  • 数据仓库相关概念的解释
  • (三)从jvm层面了解线程的启动和停止
  • [译] React v16.8: 含有Hooks的版本
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • JavaScript中的对象个人分享
  • Java-详解HashMap
  • Java小白进阶笔记(3)-初级面向对象
  • JS 面试题总结
  • mac修复ab及siege安装
  • PAT A1050
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python实现BT种子转化为磁力链接【实战】
  • scala基础语法(二)
  • Vue 重置组件到初始状态
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 开源SQL-on-Hadoop系统一览
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信开源mars源码分析1—上层samples分析
  • kubernetes资源对象--ingress
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • (2)MFC+openGL单文档框架glFrame
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (k8s中)docker netty OOM问题记录
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (poj1.2.1)1970(筛选法模拟)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十八)三元表达式和列表解析
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)C#调用WebService 基础
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .NET Core 版本不支持的问题
  • .Net Core和.Net Standard直观理解