首页 > 其他分享 >vue实现子父组件之间通信

vue实现子父组件之间通信

时间:2023-06-14 09:13:18浏览次数:39  
标签:count vue 子父 点击 isLoading error 组件 true

<template>
    <div>
        <button @click="handleClick" :disabled="isLoading">
            {{ isLoading ? "loading" : "submit" }}
        </button>
        <div class="err">{{ error }}</div>
    </div>
</template>
<!-- 
    实现子组件向父组件发起通信,父组件完成通信后,子组件在向下执行
    第一种方法:使用$emit()多个参数,整个回调函数,然后在父组件完成后,进行回调
    第二种方法:使用$listeners 
    $emit和$listeners区别:
        $emit符合单向数据流,子组件发出通知,父组件监听;$listeners在子组件直接使用父组件的方法(类似与函数)
        $emit受调试工具监控$listeners不受调试工具监控
        $listeners获取传递过来方法,因此调用方法可以知道返回值。但是$emit仅仅向父组件发送通知,操作都是由父组件完成,子组件无法进行参与,也就不知道父元素处理的结果,除非父元素返回结果

 -->
<script>
export default {
    data() {
        return {
            count: 0,//点击次数
            isLoading: false,
            error: 'aaa',
        }
    },
    methods: {
        //第一种使用$emit来形成通信方式
        // handleClick(){
        //         /*点击次数 +1  
        //           错误消息清空
        //           为了防止重复点击,将isloading设置true
        //           通知父组件,{我被点击了},并传递当前点击次数
        //           等待父组件处理(可能是异步),将父组件处理结果设置到error
        //         */
        //        this.count++;
        //        this.error='';
        //        this.isLoading=true;
        //        this.$emit('click',this.count,(error)=>{
        //         this.isLoading=false;
        //         this.error= error
        //        });

        //第二种使用$listeners来形成通信方式
    async handleClick() {
            /*点击次数 +1  
              错误消息清空
              为了防止重复点击,将isloading设置true
              通知父组件,{我被点击了},并传递当前点击次数
              等待父组件处理(可能是异步),将父组件处理结果设置到error
            */
            this.count++;
            this.error = '';
            this.isLoading = true;
             const result =  await this.$listeners.click(this.count);
             this.isLoading = false;
            this.error = result;
        
        }
    }
}
</script>

<style></style>

  

标签:count,vue,子父,点击,isLoading,error,组件,true
From: https://www.cnblogs.com/wsx123/p/17479181.html

相关文章

  • vue事件总线
    //事件总线:类似于单独对于一个功能的处理。组件间通信的方式;适用于任意组件间通信//exportdefault{////监控事件//$on(eventName,handler){//if(!listeners[eventName]){//listeners[eventName]=newSet();//}//......
  • android Button组件的属性和方法
    androidButton组件的属性和方法   一、相关属性     二、相关方法 setClickable(booleanclickable)设置按钮是否允许点击。clickable=true:允许点击clickable=false:禁止点击setBackgroundResource(intresid)通过资源文件设置背景色。resid:资源xml文件ID。按钮默认背......
  • .NET 使用ILPack组件将程序集保存成dll
    本文介绍使用ILPack组件将程序集保存成dll.netcore版本不再支持使用AssemblyBuilder.Save的方式将程序集保存成dll具体讨论https://github.com/dotnet/runtime/issues/15704可以使用ILPack组件将程序集保存成dll,以下为官方案例varassembly=Assembly.GetAssembly(t);......
  • vue组件之间的数据传递
    一、组件之间的关系父子关系、兄弟关系、跨级关系二、父子之间数据传递1、父组件向子组件传递【使用props】第一步:在父组件中使用子组件时,给子组件绑定属性第二步:在子组件中使用props接收绑定的属性值2、子组件向父组件传递【使用$emit】第一步:在子组件中通过......
  • vue路由
    1、在dos窗口下安装npminstallvue-router@3--save-dev--registry=http://registry.npmmirror.com2、配置路由①在src目录下面,新建router文件夹②然后再其中创建index.js路由文件、index.js代码importVuefrom'vue'//导入路由插件importVueRouterfrom'......
  • 【vue】前端下载文件自定义文件名称
    【vue】前端下载文件自定义文件名称https://blog.csdn.net/weixin_48200589/article/details/125067618下载文件自定义文件名称文件下载名称不想和后端提供的URL一样怎么办呢?1.首先给按钮去绑定一个事件2.正常我们的下载处理方式3.自定义下载的文件名字文件下载名称......
  • Vue3
    目录一vue3介绍1Vue3的变化1.1性能的提升1.2源码的升级1.3拥抱TypeScript1.4新的特性2组合式api和配置项api3vue3之vue实例4创建vue3项目4.1使用vue-cli创建4.2使用vite创建5setup6响应式6.1ref函数6.2reactive函数7reactive与ref对比8计算,监听属性8.1监......
  • 脚本组件界面布置
    脚本组件界面布置usingUnityEngine;publicclassJuse:MonoBehaviour{[Header("TypeOne")]//标题组名publicHusedis;publicGameObjectcia;publicGameObjectdia;[Space(50)]//两行之间间隙大小publicintdes;[Tooltip("Thisis......
  • Vue-watch-deep 深度监听
    首先明确一个概念,Vue是可以监听到多层级数据改变的,且可以在页面上做出对应展示。但是Vue提供的watch方法,默认是不提供深度监听的(deep默认为false,也就是不开启深度监听)(刚挂载的时候是不执行的,只有挂载完成之后的变化才会执行。如果我们想要初次挂载的时候就l执行,则需......
  • vue 的双向绑定原理(vue 的响应式原理)流程
    一、原理 二、流程第一步,“数据劫持”vue2.x用Object.defineProperty()方法来实现数据劫持,为每个属性分配一个订阅者集合的管理数组depvue3.x用ES6的Proxy构造函数来实现数据劫持。第二步,“添加订阅者”在编译的时候在该属性的数组dep中添加订阅者添加方......