zoukankan      html  css  js  c++  java
  • 组件间通信

    1,组件间通信基本原则

    ① 不要在子组件中直接修改父组件的状态数据

    ② 数据在哪,更新数据的行为(函数)就应该在哪。

    2,vue 组件间通信方式

    ① props

    使用组件标签时,

    <myComponent name="Tom"  :age="13" :setName="setName" ></myComponent>

    定义 myComponent 时,

    在组件内声明所有的 props:

    方式1,只指定名称:props:【'name','age','setName'】

    方式2,指定名称和类型:

    props:{

      name:String,

      age: Number,

      setName:Function

    }

    方式3,指定名称/类型/必要性/默认值

    props:{

      name:{

        type:String,

        required:true,

        default:xxx

      }

    }

    此方式适用于父子 组件之间传递数据,所有标签属性都会成为组件对象的属性,模板可以直接引用

    如果需要向非直接子组件传递数据需要多层逐层传递,兄弟组件也不能直接 props 通信,必须借助父组件才可以。

    ② vue 的自定义事件

    此方式只用于子组件向父组件发送消息,隔代组件或兄弟组件间通信不适合这种方式。

    子组件中 

    this.$emit('addTodo', todo)    //触发自定义事件: addTodo

    父组件中

    <TodoHeader @addTodo="addTodo"/>
    this.$on('addTodo',  this.addTodo)    // mounted 组件初始化时,绑定自定义事件(addTodo)监听
    addTodo (todo) {        //methods
        this.todos.unshift(todo)
     }, 
     
    或者父组件中:
    <TodoHeader ref="header"/>
    this.$refs.header.$on('addTodo',  this.addTodo)   //mounted
    addTodo (todo) {           //methods
        this.todos.unshift(todo)
     }, 

    ③ 消息订阅与发布(如:pubsub库)

    订阅消息:PubSub.subsribe('msg',function(msg,data) {} )

    发布消息:PubSub.publish('msg',data)

    此方式可以实现任意关系组件间通信

    ④ slot

    此方式适用于父组件向子组件传递 ' 标签数据 ' 

    子组件 Child.vue

    <template>

      <div>

        <slot name="xxx" > 不确定的标签结构 </slot>

        <div>组件确定的标签结构</div>

        <slot name="yyy">不确定的标签结构</slot>

      </div>

    </template>

    父组件:

    <child>

      <div slot="xxx">xxx 对应的标签结构</div>

      <div slot="yyy">yyy对应的标签结构</div>

    </child>

    ⑤ vuex

  • 相关阅读:
    echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
    从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!
    浏览器多进程架构、浏览器内核多线程、js单线程、GUI 渲染线程 与 JavaScript引擎线程互斥 原理
    通过script src引入ElementUI时,使用语句:window.ELEMENT.MessageBox.alert(xxx) 调用弹出框
    计算2个日期之间的天数
    js 字符串转对象
    requestAnimationFrame 知识点
    vue项目权限控制
    css中权重与继承
    Flex Basis与Width的区别
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/13466833.html
Copyright © 2011-2022 走看看