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的使用

A父、B子、C孙

组件传值的时候会用到A组件在B组件传递值,B组件会通过 $attrs获取到不在B组件props里面的所有属性,B组件通过在C组件上绑定 $attrs 和 $listeners 使C组件获取A组件传递的值并且可以调用在A组件那里定义的方法

多级组件嵌套需要传递数据时,通常使用的方法是通过vuex。但如果仅仅是传递数据,而不做中间处理,使用 vuex 处理,未免有点大材小用。为此Vue2.4 版本提供了另一种方法-- $ attrs/ $listeners

$ attrs:包含了父作用域中不被 prop 所识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件。通常配合 interitAttrs 选项一起使用。

$ listeners:包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件
例子:

// A组件
<template>
  <div class="home">
      <el-link type="primary" @click="change">测试vuex修改参数,其他页面响应式改变</el-link>
    <!-- $attrs和$listeners -->
    <Son :name="name" @change="change"></Son>
  </div>
</template>

<script>
import Son from '@/components/attrsListeners/son.vue'
export default {
  name: 'Home',
  components: {
    Son
  },
  data() {
    return {
      params: {},
      name: 'suzilong',
       aa: '$attrs和$listeners用法'
    }
  },
  computed: {
    // ...mapGetters(["sidebar"])
    sidebar() {
      return this.$store.getters.sidebar
    }
  },
  methods: {
    change() {
      console.log(this.$store)
      // this.params = this.$store.getters.sidebar
      this.$store.dispatch("app/sideBar", "hello suzilong")
    }
  }
}
</script>

B组件:不使用props获取时,可以使用 $attrs获取。当使用props获取时,不可以使用 $attrs获取

//B组件
<template>
  <div>
    <div>第二级组件</div>
    <div>{{ $attrs }}-----$attrs</div>  //{ "name": "suzilong" }
    <div>{{ $attrs.name }}---第二级组件</div>  //suzilong
    <div>{{ $attrs.aa}}---第二级组件</div>  //undefined
    <div>{{ aa }}---第二级组件</div>   //$attrs和$listeners用法
    <Sun v-bind="$attrs" v-on="$listeners"></Sun>
  </div>
</template>
<script>
import Sun from '@/components/attrsListeners/sun.vue'
export default {
  name: 'Son',
  components: { Sun },
  props: {
    aa: {
      type: String,
      default: () => {
        return ""
      }
    }
  }
}
</script>

C组件获取A值并调取A组件方法

// C组件
<template>
  <div>
    <div>第三级组件</div>
    <button @click="btn">点击</button>
    <div>{{ $attrs }}</div>  //{ "name": "suzilong" }
  </div>
</template>
<script>
export default {
  name: 'Sun',
  methods: {
    btn() {
      //调取A组件的事件
      this.$emit("change")
    }
  }
}
</script>

简单来说:$ attrs与$ listeners 是两个对象,$ attrs 里存放的是父组件中绑定的非 Props 属性,$ listeners里存放的是父组件中绑定的非原生事件

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:43:35  更:2021-09-07 10:44:17 
 
开发: 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/23 16:53:19-

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