首页 > 编程语言 >vue中组件化编程

vue中组件化编程

时间:2022-11-11 14:24:40浏览次数:36  
标签:school vue const name 编程 Vue 组件 data

组件化编程

什么是组件化编程

传统方式的编写模式
image

组件化编程的模式
image

组件是实现应用中局部功能代码和资源的集合

vue中非单文件组件的基本使用

点击查看代码
<!-- 
Vue中使用组件的三大步骤:
		一、定义组件(创建组件)
		二、注册组件
		三、使用组件(写组件标签)

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

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

三、编写组件标签:
				<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>
几个注意点
<!-- 
几个注意点:
		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
-->
		<!-- 准备好一个容器-->
		<div id="root">
			<h1>{{msg}}</h1>
			<school></school>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false
		
		//定义组件
		const s = Vue.extend({
			name:'atguigu',
			template:`
				<div>
					<h2>学校名称:{{name}}</h2>	
					<h2>学校地址:{{address}}</h2>	
				</div>
			`,
			data(){
				return {
					name:'尚硅谷',
					address:'北京'
				}
			}
		})

		new Vue({
			el:'#root',
			data:{
				msg:'欢迎学习Vue!'
			},
			components:{
				school:s
			}
		})
	</script>
组件的嵌套(父组件、子组件和app组件)
	<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>
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。
-->

分析vue和vuecomponent的关系

image

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

标签:school,vue,const,name,编程,Vue,组件,data
From: https://www.cnblogs.com/suncolor/p/16880050.html

相关文章

  • Vue3实现动态导入Excel表格数据
    1. 前言在开发工作过程中,我们会遇到各种各样的表格数据导入,大部分我们的解决方案:提供一个模板前端进行下载,然后按照这个模板要求进行数据填充,最后上传导入,这是其中一种......
  • 编程自测
      2017级《JAVA语言程序设计》  上机考试试题                 2019.01.10  考试要求 一、本试卷为2017级《JAVA......
  • 从0搭建vue3组件库: Input组件
    本篇文章将为我们的组件库添加一个新成员:Input组件。其中Input组件要实现的功能有:基础用法禁用状态尺寸大小输入长度可清空密码框带Icon的输入框文本域自适应......
  • 软件工程 结对编程实验二-荆雪冰
    实验题目本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。题目1:我们在刚开始......
  • 关于组件,你真的了解么?
    最近经常听到“组件化开发”,那架构设计里,组件到底如何定义、设计和应用呢,今天我们一起来聊聊。本文主要内容:什么是组件?如何设计组件?如何用组件构建系统?1、什么是组件?组件是......
  • 如何快速的学习一门新的编程语言?
    工作中,经常有工作两年左右的同事,用手挠挠发量本来就不多的脑袋,问我:“我如何快速上手一门新语言呢?”程序世界变化非常快,新的框架、语言,新的词汇层出不穷,那作为有追求的技术人......
  • 【Java】guava(六)函数式编程与惰性求值
    举个例子,比如我们的web服务器应用,我们可能会写一个类似拦截器一样的模块来提前把一些公共参数抽取出来,比如像token,userid,ip地址等等这样的信息,放入一个类似ThreadLocal的对......
  • Vue3 的watch 监视属性
    1.监听单个watch(变量,(新值,老值)=>{})2.监听多个watch([变量1,变量2],(新值,老值)=>{})3.监听对象watch(()=>对象,(新值)=>{})4.监听对象属性watch(()=>对象.......
  • vue 通过xlsx插件实现导出excel
    ``点击查看代码/*eslint-disable*/import{saveAs}from'file-saver'import*asXLSXfrom'xlsx'import{Message}from'element-ui';import{findTree......
  • Vue3后台系统做一个富文本编辑器
    前言:富文本编辑器的插件网上有很多,有些需要二次开发,有些有框架的限制,也有些稳定性差。我这边开发中由于领导催的紧,所以为了提高一下自己的效率决定使用wangEditor,这个编辑......