一、组件间的通信
1.爷爷与孙子之间的通信。
最近做了一个类似朋友圈的需求。在下做的评论页(上方动态详情,下方评论列表,最底部fixed点赞+评论的编辑框)。如图:
妈呀,图太大。
爷爷组件要把点赞信息传给孙子,爷爷→爸爸→孙子。孙子还要改变这个点赞信息。vue父子组件通信需要通过prop,但是呢,子组件没法改这个prop,
a.通过一层一层emit?这样不好,太麻烦了
b.prop赋给一个新属性,但是,这个prop的值爷爷第一次给传了个默认值,爷爷请求接口后又给传了,造成的后果是,虽然prop总是最新的,但是孙子拿到的总是第一次传的。完成不了。
c.一个比较厉害的前端大哥跟我说:我直接把这个信息放到一个对象里传给你吧,这样就可以随意修改了,就好像const一个常量,修改这个常量会报错,但const的是一个对象,修改对象下的属性是不报错的,以此类推,是不是父组件传个object,子组件修改其属性就没问题了呢,试了一把,果然好用这呢,哈哈哈。
二、this指向
a.对于普通函数(包括匿名函数),
this
指的是直接的调用者,在非严格模式下,如果没有直接调用者,
this
指的是window。showMessage1()里setTimeout使用了匿名函数,
this
指向
window。
b.箭头函数是没有自己的
this
,在它内部使用的
this
是由它定义的宿主对象决定。showMessage2()里定义的箭头函数宿主对象为vue实例,所以它里面使用的
this
指向vue实例。
注:
【普通函数的
this
】
普通函数的
this
是由动态作用域决定,它总指向于它的直接调用者。具体可以分为以下四项:
this
总是指向它的直接调用者, 例如 obj.func() ,那么func()里的
this
指的是obj。
在默认情况(非严格模式,未使用
'use strict'
),如果函数没有直接调用者,
this
为window
在严格模式下,如果函数没有直接调者,
this
为undefined
使用call,apply,bind绑定的,
this
指的是绑定的对象