• vue的组件通信


    组件通信大概分三种;

    一,父子通信

    父传子是在子组件中通过props来接收父组件传递过来的数据:

    例如:
    props: {
    title: {
    type: String, //检查接收的数据类型
    default: '请输入标题', //设置如果没有传递数据时的默认值
    required:true //必填项,不传递会报错提醒
    }
    }

    通过添加sync属性配合$emit实现父子通讯的双向数据流:

    父组件:
    <header-com :title.sync="title" />

    子组件:
    this.$emit('update:title', '1906A')

    子->父:$emit 通过事件派发机制

    this.$emit('要派发的自定义事件名',要传递的值)

    例如:

    this.$emit('confirm', { name: this.name, price: this.price })
    $parent:子组件直接父组件

    $children:父组件直接调用子组件

    ref:通过ref给dom元素或组件本身添加名称来实现

    例如:
    <mask-dialog ref="dialog" />

    JS中通过this.$refs.名子访问
    例如:this.$refs.dialog

    二,兄弟通信

    两个办法第一是bus通讯;

    创建一个空的vue并导出

    import Vue from 'vue'
    const Bus = new Vue();

    export default Bus;

    在main.js中注入,

    import Bus from './utils/bus'
    // 挂载到Vue原型上
    Vue.prototype.$bus = Bus;
    实现派发和监听
    A组件派发
    this.$bus.$emit('up', this.str)

    还可用vuex来实现通信效果

    vuex一般用于:根据项目复杂程度,组件比较多,数据传递比较复杂,数据难于管理时,就会想到vuex,例如:电商,后台管理的项目

    vuex他是vue中集中管理数据工具

    先安装vuex:::

    npm install vuex --save
    vuex中有着五大核心:
    state:数据的厂库
    actions:通常用于异步方法操作,但不会在这步改变state的值

    mutations:

    在actions中方法中通过commit('mutaions方法名',要传递的值);
    注意:通常在muations中定义的方法名,并且mutions中代码都是同步操作

    modules:

    为了解决应用的所有状态会集中到一个比较大的对象的臃肿,管理复杂的问题
    读取module中的数据状态

    getters:是state的计算属性,一般在组件中使用

    三,隔代通信


    $attrs

    $listeners

    provide和inject:一般平时用不少,除非你要开发vue组件库时才会用上

    provide () {
    return {
    msg: 'hello,vuejs',
    app: this
    }
    }


    provide:{
    msg: 'hello,vuejs',
    app: this
    }
    说的再俗气一点:用本地存储也可以实现上面的所有通讯方式

  • 相关阅读:
    查看线程
    shiro+多tomcat+redis实现session共享
    win11系统设置笔记本合盖上不休眠
    nvm切换node版本出现乱码 exit status 1:
    nvm安装vuecli
    SQL Server Management 2012 启动错误及解决:Cannot find one or more componets
    SQL Server 2012 连接 Oracle 11gR2 Database
    SQL Server 数据库跨区域时间问题
    SSIS 同步不同数据库的不同两张表
    Reporting Service 不能发送订阅报表的问题
  • 原文地址:https://www.cnblogs.com/mzj143/p/12940311.html
Copyright © 2020-2023  润新知