vue组件通信

父组件=>子组件

props

//child

props: ["message"],

//parent

<HelloWorld message="hello world"></HelloWorld>

特性$attrs

//child里没有在props里声明foo,可以用如下方式取

this.$attrs.foo

//parent

<HelloWorld foo="foo"></HelloWorld>

问题1:props和$attrs的区别

props需要声明才能取到值,子类需要主动接收属性

$attrs不需要声明可以取到值,子类不用主动接收属性,会直接放在子类根元素上。在props里声明的属性不会在$attrs里取到

引用refs

//parent 想修改子组件里的xx值

<HelloWorld foo="foo" ref='fx'></HelloWorld>

this.$refs.fx.xx='xxxx'

子元素$children

// parent

this.$children[0].xx = 'xxx'

问题2:$refs和$children 的区别

$refs元素或者组件标签上添加ref属性指定一个引用信息,引用信息将注册在父组件的$refs对象上,使用$ref来指向dom元素或者组件实例,

需要注意:

$refs不能在created生命周期中使用 因为在组件创建时候 该ref还没有绑定元素 

如果想在method中使用,使用 this.$nextTick(() => {}) 等页面渲染好再调用,这样就可以了

$children 访问子组件实例,返回的是一个子组件数组 因为是异步,所以不保证顺序的,

子组件=>父组件

//child

this.$emit('addTest',message)

//parent

<Cart v-on:addTest="cartAdd"></Cart>

兄弟组件:通过共同父辈组件

通过共同的祖辈组件搭桥,$parent或$root。

// brother1

this.$parent.$on('foo', handle)

// brother2this.$parent.$emit('foo')


祖先和后代之间

由于嵌套层数过多,传递props不切实际,vue提供了 provide/inject API完成该任务

provide/inject:能够实现祖先给后代传值

// ancestor

provide() {    return {foo: 'foo'}

}

// descendant

inject: ['foo']

任意两个组件之间:

事件总线 或 vuex事件总线:创建一个Bus类负责事件派发、监听和回调管理

// Bus:事件派发、监听和回调管理

class Bus{

constructor(){

this.callbacks = {}}

$on(name, fn){

this.callbacks[name] = this.callbacks[name] || []

this.callbacks[name].push(fn) }

$emit(name, args){

if(this.callbacks[name]){ this.callbacks[name].forEach(cb => cb(args)) } }

} // main.js Vue.prototype.$bus = new Bus() // child1 this.$bus.$on('foo', handle) // child2 this.$bus.$emit('foo')

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 能工摹形,巧匠窃意。必三省吾身,万不可怠惰因循。 foreword 这篇容纳了我个人所知道的一些Vue 2.x组件...
    aichisuan阅读 2,900评论 0 1
  • 1、props / $emit (这是最常用的一种父子组件之间传递数据的方式) 父组件通过绑定属性来向子组件传递数...
    keke柯柯柯阅读 4,344评论 0 0
  • 对于vue来说,组件之间的消息传递是非常重要的,下面是我对组件之间消息传递的各种方式的总结,总共有8种方式。 1....
    edc余悸阅读 2,860评论 0 3
  • 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。一...
    虚竹_d36e阅读 1,768评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 13,585评论 0 11