请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,关于这个this_=this 这一点有点不懂,打印this时是一个vue,而通过var this_=this 之后,this_打印的是组件?

正在回答 回答被采纳积分+3

2回答

Dell 2019-05-17 00:28:02

因为外层的this 是组件,而函数内部的this是 this.bus实例

0 回复 有任何疑惑可以回复我~
六一888 2019-05-16 22:23:36

this.bus.$on 里面的函数的 this 指的是 bus 指向的 vue 实例,而 this_ 是将 vue 全局组件的 this 赋值给它。向外触发事件,以及监听事件都是由 bus 指向的 vue 实例来完成的,在课程中说:当一个 child 向外触发事件后,两个 child 都进行了事件的监听。我也没有明白第二句话的具体意思,我在控制台测试后,发现如果不通过 bus 这个属性来监听事件,那么两个 child 并不会同时监听事件,无法达到非父组件传值的效果。希望老师看到我的回答后,可以回答一下我的疑惑点。

我的猜想是:当两个 child 都渲染到页面时,因为两个 child 中都有属性 bus,而都指向同一个 vue 实例,这个实例监听 change 事件时,也就是说这两个 child 都会同时监听 change 事件,所以函数中的代码会被执行两次。但是这样猜想后,又不能完全认同,因为当使用 vue 全局组件去触发事件和监听事件时,当两个 child 渲染到页面后,两个 child 的监听事件为什么不是分别进行的?而只有点击的 child 在监听?

0 回复 有任何疑惑可以回复我~
  • Dell #1
    同学,能否直奔主题,拿个例子提问,这样会更好。你的猜想正确。什么叫分别进行的,你一只都在监听,你不监听着,怎么能知道人家点击了。
    回复 有任何疑惑可以回复我~ 2019-05-17 00:30:10
  • 六一888 回复 Dell #2
    我没有使用属性 bus 指向的 vue 实例来监听,而是用 vue 组件来触发事件和监听事件,比如这样:this.$emit() this.$on() 这样的话,就只有被点击的 child 触发事件和监听事件。而使用属性 bus 指向的 vue 实例来触发事件和监听事件时,两个 child 都可以同时监听到。不是特别理解上述描述的两种不同现象的原理,只是大概知道是这么回事。                    
    
    我的另一个猜想是,因为属性 bus 指向的 vue 实例,向外触发了事件 change,那么两个 child 的都是同一个 vue 实例,所以会有同时监听到 change 事件。而 vue 组件上只有被点击的 child 向外触发了 change 事件,所以也就只有被点击的 child 能监听到 change 事件。
    
    我知道原因了,原来是在调用子组件时,每调用一次就会生成一个新的 vue 实例,触发 change 事件和监听 change 事件都是分开的,而属性 bus 指向的 vue 实例是同一个,所以两个 child 的属性 bus 指向的 vue 实例可以同时监听之前由属性 bus 指向的 vue 实例触发的 change 事件。
    回复 有任何疑惑可以回复我~ 2019-05-17 09:51:37
  • 为啥不能删除自己的评论。。。
    回复 有任何疑惑可以回复我~ 2019-05-17 09:55:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信