组件通信高级

1、组件间通信props(一)
props 子组件声明接收属性三种写法 【‘todos’】 { todos:Array} { todos:{type:Array,default:[]}}

父子之间 
父可以给子传递 非函数和函数
传非函数数据 就是父给子
传函数数据  本质是父想要子的数据



特殊:
	路由配置 props(三种)  路由组件之间没有标签,但是可以把参数通过路由映射为属性
	1、布尔值  true   把路径params参数映射为要显示的组件内属性
	2、对象   {name:'赵丽颖'}   只能映射传递额外的静态的数据 一般不用
	3、函数	  props:(route) =>{}  自己手动映射params参数和query参数 成为要显示的组件内属性
	
	如果不用props,那么组件内要用数据必须要写成 this.$route.params.xxx   this.$route.query.xxx

2、全局事件总线(二)

所有场合

本质是一个对象
全局事件总线的角色标准
	1、所有的组件对象都可以看到它
	2、可以使用$on和$emit方法

	vm对象
	vm对象必须挂在Vue的原型上



怎么添加事件总线
1、安装总线  本质就是在Vue的原型上挂上vm作为总线 
2、在接收数据的组件对象当中  获取总线给总线绑定自定义事件   this.$bus.$on
3、在发送数据的组件对象当中  获取总线触发总线身上绑定的自定义事件   this.$bus.$emit

3、组件间通信自定义事件(三)

自定义事件
	子向父传递数据

*******************************************
原生dom事件    
	事件类型  回调函数   谁调用   默认传递的实参是什么 


	1、事件类型       固定的几个 

	2、回调函数       自己去定义的

	3、触发(分发、触发事件)了谁调用   系统调用浏览器去调用 

	4、event事件对象 就是浏览器调用回调函数的时候传递的默认参数

	box.onclick = function(event){
		
	}


自定义事件     
	事件类型  回调函数   谁调用   默认传递的是什么

	1、事件类型            无数个

	2、回调函数            自己去定义的

	3、谁调用              自己去调用   自己使用$emit触发调用的

	4、默认传递的是什么    默认传递的是自己给的参数 (有就有,没有就没有undefined)
	
	this.$emit('haha',10)





原生dom事件在html标签和组件标签上的区别   (Event1组件测试)
	在html标签上添加就是原生的dom事件
	在组件标签上添加就是自定义事件,想成为原生的事件得添加修饰符.native,就是把原生dom事件添加到组件根元素上	(事件委派了)

vue自定义的事件在html标签和组件标签上的区别 (Event2组件测试)
	在html标签上添加自定义事件无意义,所以自定义事件是给组件标签添加的		
	事件名可以任意,也可以和原生的dom事件名相同,但是在组件标签身上即使添加原生dome事件也是自定义的

4、v-model 深入(四)
element-ui表单相关项都使用到了v-model
官方网站也提出了怎么去使用

1、html input v-model的本质
	:value = “data”  //读取数据
	@input = "data = $event.target.value"  //写数据
	

2、组件标签上 v-model本质
	:value = "data"  父组件传递属性给子组件,子组件需要接受
	@input = "data = $event" //父组件当中给子组件添加的自定义事件
	数据在父组件当中

	
	子组件当中必须这样写
	先接受props:['value']
	
	子组件表单类元素
		:value = "value"
		@input = "$emit('input',$event.target.value)"


干了两件事  
	先显示数据  
	再绑定修改数据的事件   
	只不过在html和组件标签上绑定的@input事件不同   一个是原生的 一个是自定义的事件


实现父子组件双向数据同步问题


源码查看element-ui的input是不是使用了

本质上还是自定义事件和props组合

5、sync 属性修饰符(五)

实现父子组件双向数据同步问题
和 v-model 实现效果几乎一样
v-model一般用于带表单项的组件
sync属性修饰符一般用于不带表单项的组件

父组件给子组件属性传递数据后面添加.sync
子组件修改数据 需要分发事件@click = $emit("update:属性名",要更新的数据)

本质上还是自定义事件和props组合

6、 a t t r s 和 attrs和 attrslinsteners(六)
本质就是父组件中给 子组件传递的所有属性组成的对象及自定义事件方法组成的对象

$attrs 如果不声明props 那么子组件当中$attrs是可以看到  如果声明了哪个属性,那么那个属性在$attrs当中看不到
它会排除 props声明接收的属性 以及class style

可以通过v-bind 一次性把父组件传递过来的属性添加给子组件
可以通过v-on   一次性把父组件传递过来的事件监听添加给子组件

对一个组件进行二次封装

7、 element-ui的button添加click事件会触发,添加dblclick就不会触发的问题

element-ui的button  子组件内部触发了这个单击事件
element-ui的button  子组件内部没有触发这个双击事件

扩展双击点击触发element-ui button事件,使用原生.native

8、$parent 和 c h i l d r e n 以 及 children以及 childrenrefs(七)
$children:所有子组件对象的数组
$parent:代表父组件对象

父组件当中可以通过$children找到所有的子组件去操作子组件的数据(当然可以找孙子组件)
子组件当中可以通过$parent找到父组件(当然可以继续找爷爷组件)操作父组件的数据

9、扩展: 多个组件有部分相同的js代码

html js  css 相同     封装组件

同一个组件js代码重复    封装函数

不同的组件js代码重复  封装混合  

实现组件之间js代码的复用  利用vue的mixin技术   参考官网

比如多个组件的methods里面很多函数都是重复的 那么我们可以定义单独的模块去把这些相同的代码定义到外部

export const xxxMixin = {

	methods:{
		重复的代码写在这
		
	}

}

10、作用域插槽(八)
适用:父子之间
数据是在父组件当中的,数据是要给子组件去展示的(vfor)
展示的过程当中,数据的结构 子组件说了不算,是由父组件决定的

父组件要把需要子组件展示的数据传递给子组件
子组件在展示的过程当中,需要改变结构的数据传回给父组件
父组件再把结果和数据一并传回给子组件

11、vuex(九)
所有场合

	看项目的大小来决定要不要使用vuex
	一般我们都要用的,一般情况我们的项目都比较大,项目比较复杂,使用vuex比较方便

	项目如果很小,使用vuex反而会降低效率,因为vuex是需要占用打包体积的

5个核心概念
state
mutations
actions
getters
modules

12、消息的订阅和发布 PubSubJS (十) 参考 github
所有场合
代码类似全局事件总线,但是在vue当中因为存在了全局事件总线,所以这个东西几乎不用
PubSubJS 要用这个包来实现消息的订阅和发布,这个包使用起来会增加体积

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值