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

vue组件学习(一)

目录

  • 1. 全局注册和局部注册
    • 全局注册
    • 局部注册
  • 2.组件中的传值 props
    • 数据传输方向: 父组件传到子组件。
  • 3.事件
    • 事件校验
  • 最后

1. 全局注册和局部注册

声明vue实例

全局注册

import { createApp } from './vue.js'
const app = createApp({})
app.component('组件名', /**/)

因为是直接在app上创建的,所以在任何组件中都可以使用注册的组件

局部注册

局部注册则是在对应的vue组件中的components: { 组件 }
只能在当前组件中使用,他不会传递给子组件或更深层次的组件
例如:

<script>
import ComponentA from './ComponentA.vue'

export default {
  components: {
    ComponentA
  }
}
</script>

<template>
  <ComponentA />
</template>

2.组件中的传值 props

在我们注册号组件之后,我们要使用组件就需要用到里面的数据
怎么传值呢?答案是使用props
props是子组件用于接受父组件数据的
例如

// 父组件
import ComponentA from './ComponentA.vue';
export default{
	data(){
		drugList:{
			drugName:'阿莫西林',
			drugCode:'abc'
		}
	},
	components:{ComponentA}

}
<template>
	<ComponentA :drug-name = "drugList.drugName" :drug-code="drugList.drugCode"/>
</template>
//子组件:
<template>
	<p>{{ drugName }}</p>
	<p>{{ drugCode }}</p>
</template>

<script>
export default{
 props:{
	drugName: {
		type	: String,
		required: true
	},
	drugCode: {
		type	: String,
		required: true
	}
 }

}
</script>

如果drugList里面的属性太多了那我们不可能一个个都v-bind绑上去
这时候可以直接v-bind这个对象

//父组件
<template>
	<ComponentA v-bind="drugList"/>
</template>

//子组件:
<template>
	<p>{{ drugList.drugName }}</p>
	<p>{{ drugList.drugCode }}</p>
</template>

<script>
export default{
 props:{
	drugList: {
		type	: Object,
		required: true
	},
 }

}
</script>

数据传输方向: 父组件传到子组件。

子组件要是修改父组件的值会报错
如果在遇到需要使用父组件传进来的值作为变量需要修改的话可以将他重新赋值或者作为计算属性(因为父传进来的是引用)

export default{
	props:{
		drugList: {
			type	: Object,
			required: true
		},
	},
	
	data(){
		return{
			drugListNew: JSON.parse(JSON.stringify(this.drugList))//深拷贝
		}
	}

}
<template>
	<button @click="drugListNew.drugName='123'"></button>
</template>

3.事件

使用this.$emit从子组件向父组件发送通知,父组件监听并处理
子组件

子组件
<template>
	<button @click="methodA"></button>
</template>
<script>
	export default{
		data(){
			return{
				name:'测试名字'
			}
		},
		
	
		methods: {
			methodA(){
				console.log('处理完成')
				this.$emit('someEvent', this.name)
			}
		}
	}
</script>

父组件

<template>
	<button @some-event="handleSomeEvent"></button>
</template>

<script>
	export default{
		methods: {
			handleSomeEvent(data){
				console.log(data)
			}
		}
	
	}
</script>

事件校验

<script>
	export default{
		emits:{
			click: null,//代表click事件不需要校验
			
			submit: ({name, code})=>{
				if(name && code) return true
				else	return false
			}
		},
		methods: {
			submitForm(name, code){
				this.$emit('submit', {name, code})
			}
		}
	}
</script>

最后

如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。


http://www.kler.cn/a/506233.html

相关文章:

  • YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练
  • libcurl编译配置和使用
  • 《小迪安全》学习笔记05
  • 手摸手实战前端项目CI CD
  • 4.Proto 3 语法详解
  • SQL BETWEEN 操作符
  • 前端项目打包体积的分析和优化
  • 聊一聊 vPC Peer-gateway 网关增强功能
  • 从Web3到元宇宙:去中心化网络如何改变虚拟空间的体验
  • salesforce在opportunity的opportunity products页面增加一个按钮,可以批量删除products
  • 前端主流Web3D引擎详解大公司现Web3D业务所用引擎分析
  • UDP报文格式
  • 32单片机综合应用案例——基于GPS的车辆追踪器(三)(内附详细代码讲解!!!)
  • 【网络安全】FortiOS Authentication bypass in Node.js websocket module
  • Gtk-WARNING **: 18:50:42.615: cannot open display:
  • 多态(3)
  • Web3与加密技术的结合:增强个人隐私保护的未来趋势
  • C# 特性(Attributes)详解
  • paimon使用腾讯云cosn作为仓库存储的使用方式
  • C语言的数据库交互
  • SQL-leetcode—619. 只出现一次的最大数字
  • 《Keras 3 在 TPU 上的肺炎分类》
  • 无人机天文导航与卫星导航相结合方面,研究创新点与课题推荐
  • 网络安全 | 什么是CC攻击防护?
  • Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
  • MR30分布式IO:贴标机产线的高效扩展与控制新纪元