vue-组件通信

软件运
• 阅读 1574

组件通信

1、父子通信

父组件给子组件通信是通过(porps)属性传递的
创建属性有2种方式
一种是静态创建属性 或叫静态prop传递数据
一种是动态创建属性 或叫动态prop传递数据
【案例】
<div id="app">
    <!-- 静态创建属性 或 静态prop传递数据-->
    <tk msgs="静态创建属性"></tk><br/>
    <!-- 动态创建属性 或 动态prop传递数据-->
    <tk v-bind:msgs="msg"></tk>
</div>
<!-- JavaScript 内联模板字符串 -->
<script type="text/x-template" id="tkTpl">
    <input type="button" @click="alerttk" value="弹框 " />
</script>
<script>
    //创建局部组件(注册)
    //组件里面的data是个函数
    var tankuang = {
        template:"#tkTpl",
        //注册属性
        props:['msgs'],
        methods:{
            alerttk:function(){
                alert(this.msgs)
            }
        }
    }
    //初始化根实例
    var app = new Vue({
        el:"#app",
        data:{
            msg:"动态创建属性"
        },
        //挂在组件
        components:{
            'tk':tankuang
        }
    });
</script>

2、子父通信

父组件定义事件,子组件触发这个事件,通过$emit来触发
【案例】
<div id="app">
    <tk msgs="子父通讯" v-on:jieshou="jieshoufn"></tk><br/>
</div>
<!-- JavaScript 内联模板字符串 -->
<script type="text/x-template" id="tkTpl">
    <input type="button" @click="alerttk" value="弹框 " />
</script>
<script>
    //创建局部组件(注册)
    //组件里面的data是个函数
    var tankuang = {
        template:"#tkTpl",
        //注册属性
        props:['msgs'],
        methods:{
            alerttk:function(){
                alert(this.msgs);
                this.$emit("jieshou","子向父传递","可以传递")
            }
        }
    }
    //初始化根实例
    var app = new Vue({
        el:"#app",
        data:{
            msg:"动态创建属性"
        },
        //挂在组件
        components:{
            'tk':tankuang
        },
        methods:{
            jieshoufn:function(arg1,arg2){
                alert("自己定义的事件");
                console.log(arg1);
                console.log(arg2);
            }
        }
    });
</script>
结果为下

vue-组件通信

3、非父子通信

触发组件 A 中的事件
在组件 B 创建的钩子中监听事件
【案例】
<div id="app">
    <tk></tk><br/>
    <tk1></tk1>
</div>
<!-- JavaScript 内联模板字符串 -->
<script type="text/x-template" id="tkTpl">
    <input type="button" @click="alerttk" value="弹框 " />
</script>
<script>
    var bus = new Vue();
    //创建局部组件(注册)
    //组件里面的data是个函数
    var tankuang = {
        template:"#tkTpl",
        methods:{
            alerttk:function(){
                //触发兄弟元素的事件
                bus.$emit("passid", 1,2);
            }
        }
    }
    var tankuang1 = {
        template:"<div>{{id}}</div>",
        data:function(){
            return {
                id : 0
            }
        },
        //定义函数要在钩子里定义
        mounted:function(){
            var shangmian = this;
            bus.$on("passid",function(arr1,arr2){
                shangmian.id=arr1+arr2
            })
        }
    }
    //初始化根实例
    var app = new Vue({
        el:"#app",
        data:{
            msg:"动态创建属性"
        },
        //挂在组件
        components:{
            'tk':tankuang,
            'tk1':tankuang1
        },
        methods:{
            jieshoufn:function(arg1,arg2){
                alert("自己定义的事件");
                console.log(arg1);
                console.log(arg2);
            }
        }
    });
</script>
结果为下图

vue-组件通信

点赞
收藏
评论区
推荐文章
Chase620 Chase620
4年前
vue的8种通信方式
1.props/emit1.父组件向子组件传值下面通过一个例子说明父组件如何向子组件传递数据:在子组件article.vue中如何获取父组件section.vue中的数据articles:\'红楼梦','西游记','三国演义'\//section父组件<template<divclass"section"
Souleigh ✨ Souleigh ✨
5年前
React 组件间通信的10种方法
组件间通信方式总结父组件子组件:1.Props2.InstanceMethods子组件父组件:1.CallbackFunctions2.EventBubbling兄弟组件之间:1.ParentComponent不太相关的组件之间:1.Context2.Portals3.Global
科林-Colin 科林-Colin
4年前
Vue 组件通信方式及其应用场景总结
前言相信实际项目中用过vue的同学,一定对vue中父子组件之间的通信并不陌生,vue中采用良好的数据通讯方式,避免组件通信带来的困扰。今天笔者和大家一起分享vue父子组件之间的通信方式,优缺点,及其实际工作中的应用场景首先我们带着这些问题去思考1vue中到底有多少种父子组件通信方式?2vue中那种父子组件最佳通信方式是什么?3
爱丽丝13 爱丽丝13
4年前
React 组件通信之发布订阅模式
React通信react的数据流是单向的,react通信有以下几种方式:父向子通信:传入props子向父通信:父组件向子组件传一个函数,然后通过这个函数的回调,拿到子组件传过来的值父向孙通信:利用context传值。React.createContext()兄弟间通信:​1、找一个相同的父组件,既可以用pr
Chase620 Chase620
4年前
Vue方向:prop验证
我们可以为组件的prop指定验证规则,如果传入的数据不符合要求,Vue会发出警告,这对于开发给他人使用的组件非常有用。要指定验证规则,需要用对象的形式来定义prop,而不能用字符串数组;1、验证父组件传递过来的数据类型props选项值如果为数据,则表示只是单纯的罗列父组件传递过来的数据而已如果props选项的值是一个对象,那么表示要验证接收的
Dax Dax
4年前
Vue父子组件
几种常见的通信方式:1、prop属性父组件通过绑定属性的方式,给子组件传值,同时子组件通过设置props来接收letChildVue.extend(template:'content',props:content:type:String,default:()r
Stella981 Stella981
4年前
Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus
背景对于Android系统来说,消息传递是最基本的组件,每一个App内的不同页面,不同组件都在进行消息传递。消息传递既可以用于Android四大组件之间的通信,也可用于异步线程和主线程之间的通信。对于Android开发者来说,经常使用的消息传递方式有很多种,从最早使用的Handler、BroadcastReceiver、接口回调,到近几年流行的通
Stella981 Stella981
4年前
FLutter父子组件通信
本文介绍flutter父子组件数据传递和回调.还是以之前的代码为例Flutter\_DayByDay(https://gitee.com/Royce_he/Flutter_DayByDay)由于之前用ReactNative写项目,顺便对比一下RN父组件直接在xml标签中写属性{值/方法},子组件通过props去取属性和方法
Wesley13 Wesley13
4年前
JSON,异步加载(学习笔记)
JSON是一种传输数据的格式(以对象为样板,本质上就是对象,但用途有区别,对象就是本地用的,json是用来数据传输的,前端与后端的数据通信)JSON是静态类(不需要构造),类似于Math,内部有各种函数   1).JSON.parse();stringjson(解析成对象属性和属性值,可以进行调用)  2).JSON.stringi
陈杨 陈杨
8个月前
鸿蒙5开发宝藏案例分享---应用性能优化指南
Column()Child(msg:this.message)//通过@Prop传递@ComponentstructChild@Propmsg:string;//子组件接收build()Text(this.msg)精准刷新监听:用@Watch监听数据变化,
陈杨 陈杨
8个月前
鸿蒙5横向柱状图series属性解析
大家好,欢迎回来鸿蒙5莓创图表组件的专场,我们这一期来讲解McHorBarChart(横向柱状图)组件中series属性的详细用法。series属性是控制柱状图数据系列的核心配置项,掌握好这些属性可以让你轻松创建各种样式的柱状图效果。1.name属性作用: