IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue中$attrs和$listeners的使用 -> 正文阅读

[JavaScript知识库]vue中$attrs和$listeners的使用

vue中组件通信父??子通过props,子??父通过$emit,那么父??孙,孙??父呢?

通常使用的方法是通过vuex。如果仅仅是传递数据,而不做其他处理,使用 vuex处理有点大材小用。
在这里插入图片描述
所以就有了 $attrs / $listeners ,通常配合inheritAttrs一起使用。(注意:是2.4新增的)

📙inheritAttrs

inheritAttrs的讲解参考官网,如下图所示:
在这里插入图片描述

📙$attrs / $listeners

📒$attrs

  • 官网讲解
    在这里插入图片描述

  • 🌰例子

    • 父组件(component_parent.vue)
      <template>
        <div>
          <child :parent="parentString" :info="info"></child>
        </div>
      </template>
      
      <script>
      	import child from "./component_child"
      	export default {
      	  name: '',
      	  components: { child },
      	  data() {
      	    return {
      	      parentString: "这是父组件",
      	      info: {
      	        name: "张三",
      	        address: "陕西省"
      	      }
      	    }
      	  }
      	};
      	</script>
      
    • 子组件(component_child.vue)
      <template>
        <div>
          <div>{{parent}}</div>
          <div>子组件:{{$attrs}}</div>
          <grandson v-bind="$attrs" :message="message"></grandson>
        </div>
      </template>
      
      <script>
      	import grandson from './component_grandson.vue'
      	export default {
      	  name: '',
      	  components: { grandson },
      	  props: [parent],
      	  data() {
      	    return {
      	      message: "这是子组件的传值"
      	    };
      	  },
      	  mounted() {
      	    console.log('child', this.$attrs);  //打印出Info的值,(因为parent的值已经被props接收,所以只打印出info)
      	  },
      	};
      </script>
      
    • component_grandson.vue
      <template>
        <div>孙子组件:{{$attrs}}</div>
      </template>
      
      <script>
      	export default {
      	  name: '',
      	  data() {
      	    return {
      	    };
      	  },
      	  mounted() {
      	    console.log('grandson', this.$attrs);
      	  },
      </script>
      

    在这里插入图片描述
    父组件的值传给了子孙组件,那子孙组件的值如何同步给父组件呢?

📒$listeners

  • 官网讲解
    在这里插入图片描述
  • 🌰例子
    • 父组件(component_parent.vue)
      <template>
        <div>
          <child :parent="parentString" :info="info" @updateInfo="updateInfo"></child>
        </div>
      </template>
      
      <script>
      	import child from "./component_child"
      	export default {
      		 name: '',
      		 components: { child },
      		 data() {
      		   return {
      		      parentString: "这是父组件",
      		      info: {
      		        name: "张三",
      		        address: "陕西省"
      		      }
      		    }
      		 },
      		 methods: {
      		    updateInfo() {
      		      console.log('更新父组件');
      		    }
      		 },
      	};
      </script>
      
    • 子组件(component_child.vue)
      <template>
        <div>
          <div>{{parent}}</div>
          <div>子组件:{{$attrs}}</div>
          <grandson v-bind="$attrs" :message="message"  @childInfo="childInfo"></grandson>
        </div>
      </template>
      
      <script>
      	import grandson from './component_grandson.vue'
      	export default {
      	  name: '',
      	  components: { grandson },
      	  props: [parent],
      	  data() {
      	    return {
      	      message: "这是子组件的传值"
      	    };
      	  },
      	  mounted() {
      	   // console.log('child', this.$attrs);  //打印出Info的值,(因为parent的值已经被props接收,所以只打印出info)
      	   console.log('child-listeners', this.$listeners);  //updateInfo:f
      	  },
      	  methods: {
      	    childInfo() {
      	      console.log('更新子组件');
      	    }
      	  },
      	};
      </script>
      
    • component_grandson.vue
      <template>
        <div>孙子组件:{{$attrs}}</div>
      </template>
      
      <script>
      	export default {
      	  name: '',
      	  data() {
      	    return {
      	    };
      	  },
      	  mounted() {
      	    //console.log('grandson', this.$attrs);
      	    console.log('grandson-listeners', this.$listeners);   //updateInfo:f  childInfo:f
      	    this.$emit('updateInfo')   //触发父组件中的updateInfo函数(会打印出父组件打印的值)
      	  },
      </script>
      
    在这里插入图片描述

以上就是$attrs$listeners的使用,有问题欢迎随时指出!🏄🏄🏄

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:53:24  更:2022-03-06 12:56:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:14:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码