vue从入门到精通day06

114 阅读5分钟

day06

1、组件关系

​ 父子 兄弟 祖孙 其它

2、通信方式 props

​ 父子之间传递 ​ 父组件给子组件传递非函数数据,就是给子组件传递数据 ​ 父组件给子组件传递函数数据,本质是想要子组件的数据

使用场合:
	父子最好
	父向非子后代传递,必须逐层去传递   麻烦
	不是父子关系的组件,必须借助相同的父组件去通信  麻烦

3、通信方式 vue自定义事件 子向父传递,只是适合这个场合

​ 理解原生dom事件: ​ 事件类型 : 固定的有限的几个 ​ 回调函数 : 谁调用(浏览器) 调用时候的默认参数(事件对象event) ​

vue自定义事件
	事件类型 :  无数个  
	回调函数 : 谁调用 (自己调用)  调用时候默认的参数 (有可能有也可能没有  如果调用时候传了参数,默认参数就有
如果没有传,那就没有(undefined))		 

​ 父组件当中可以看到子组件对象(组件标签) 因此可以在父组件当中给子组件对象绑定一个自定义事件 子组件可以通过$emit去触发自己身上父组件给绑定的事件,通过调用事件回调函数传递数据给父组件

父组件当中去给子组件对象绑定事件监听  
	 @直接在组件标签对象当中去绑定,和绑定系统事件一致
	 $on,在mounted当中去绑定,但是需要获取到子组件标签对象(通过ref指定,然后获取到)
	 $once()和$on()类似,但是只能触发一次

在子组件当中适当的位置去触发事件并传递参数
	$emit(),在子组件当中去触发,子组件对象触发
	
$off()可以在销毁之前解绑事件

使用场合:子向父传递数据,其余情况都不能用

4、通信方式 全局事件总线

适用场合: 任何场合


事件总线(对象)满足的两个条件:1、所有的组件对象都能找到它  2、可以调用$on$emit

本身自定义事件可以完成子向父之间的传递,因为父组件中可以看到子组件,可以为子组件绑定事件,子组件中可以触发事件

但是如果不是子向父,那么其余的就没办法了,因为两个组件互相是看不到的,没办法再其中一个给另外一个绑定事件
此时我们可以借助中间人,也就是他们都可以同时看到的一个人,就是全局事件总线(所有的组件对象都能看到)

在接收数据的组件中,获取总线绑定事件
在发送数据的组件中,获取总线触发事件

全局事件总线说到底就是个对象,我们通常就是用vm对象作为全局事件总线使用
把vm对象添加到Vue原型对象  就形成全局事件总线(vm)

5、通信方式 消息订阅和发布(用法类似于全局事件总线,vue当中几乎不用)

​ github查阅 PubSubJS第三方插件 ​ 订阅者是接收数据的组件 ​ 发布者是发送数据的组件 ​ 坑: 订阅者的回调函数里面形参第一个必须有,而且是为了接受发布者的消息类型的,实际意义没有,但是必须写上

6、通信方式 slot插槽

​ 一个组件会多次使用,但是又有少部分结构数据会发生变化,(当然可以用不同的子组件)

那么就得通过父组件告诉子组件变化的内容是什么,此时就要用到这个插槽

子组件当中<slot></sloat>其实就是占位用的,让父组件给它填充内容,可以带标签

具名插槽
默认插槽






作用域插槽  
	子组件的slot可以通过 属性传递值给父组件,然后父组件可以根据不同需求改变这个slot内部的显示结构
	把子组件的值,传给父组件固定的区域进行操作

	父组件的数据是给子组件展示的
	子组件展示过程当中,数据的结构由父组件决定的。

7、vue-ajax使用和案例

​ github的两个测试接口:获取比较火的仓库及获取用户 ​ 接口1: api.github.com/search/repo… ​ 接口2: api.github.com/search/user…

vue-resource vue插件的使用
axios第三方库的使用



login代表用户的用户名
avatar_ur 代表用户的头像地址	
url: 代表这个用户的github地址





小案例:获取github用户
	1、静态页面实现   
		拆分页面 定义组件    3个组件  App   Search   Main   不需要Item了
		组装组件
		渲染组件

	2、动态交互和初始化显示
		2-1初始化显示Main组件的内容  Main里面要显示的是不同内容,而不是直接就是用户信息
			四个数据控制显示的内容是什么: isFirst  isLoading errMsg  users 
		2-2交互:
			点击search按钮要发送ajax请求,需要分析ajax在哪发送(当然得安装axios)
			
			点击按钮之后,需要把输入的数据发送到Main组件去发送ajax请求(全局事件总线)
			
			在Main组件中的事件回调当中发送ajax请求,发送前 成功时 失败时 都要考虑显示的内容
				也就是说需要修改数据  isFirst  isLoading errMsg  users 
			请求成功:需要过滤数据,添加给我们自己的users
			请求失败:需要把失败信息添加给我们自己的errMsg 

	3、使用vue-resource发送请求,但是现在用的不多,了解就好
		插件使用步骤:
			安装
			导入
			Vue.use(插件)

		使用方式类似axios,但是失败信息不同


	4、使用axios发送请求

​ ​ ​