vue $listeners $attr_vue query

vue $listeners $attr_vue query1、vm.$attrs2.4.0新增类型{[key:string]:string}只读详细包含了父作用域中不作为prop被识别(且获取)的特性绑定(class和style除外)。当一个组件没有声明任何prop时,这里会包含所有父作用域的绑定(class和style除外),并且可以通过v-bind=”$attrs”传入内部组件——在创建高级别的组件时非常有用。简单点讲就是包含了所有父组件在子组件上设置的属性(除了prop传递的属性、class和styl

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、vm.$attrs
  • 2.4.0新增
  • 类型 { [key: string]: string }
  • 只读
  • 详细
    包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind=”$attrs” 传入内部组件——在创建高级别的组件时非常有用。
    简单点讲就是包含了所有父组件在子组件上设置的属性(除了prop传递的属性、class 和 style )。
   <div id="app">
      <base-input
        label="姓名"
        class="name-input"
        placeholder="请输入姓名"
        test-attrs="$attrs"
      ></base-input>
    </div>
      Vue.component("base-input", { 
   
        inheritAttrs: true, //此处设置禁用继承特性
        props: ["label"],
        template: ` <label> { 
    {label}}- { 
    {$attrs.placeholder}}- <input v-bind="$attrs"/> </label> `,
        mounted: function() { 
   
          console.log(this.$attrs);
        }
      });
      const app = new Vue({ 
   
        el: "#app"
      });

打印结果
在生命周期方法mounted中打印$attrs,显示除了class和props定义的属性之外的其他属性。
通过 v-bind=”$attrs” 传入子组件内部的input标签
在这里插入图片描述

2、 vm.$listeners
  • 2.4.0新增
  • 类型 { [key: string]: Function | Array }
  • 只读
  • 详细
    包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on=”$listeners” 传入内部组件——在创建更高层次的组件时非常有用。
    简单点讲它是一个对象,里面包含了作用在这个组件上所有的监听器(监听事件),可以通过 v-on=”$listeners” 将事件监听指向这个组件内的子元素(包括内部的子组件)。
    为了查看方便,我们设置inheritAttrs: true,后面补充一下inheritAttrs。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>arrs与listeners</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <child1 :a-child1="aChild1" :a-child2="aChild2" name1="组件1" name2="组件2" attrs='attrs' @test1="test1" @test2="test2"></child1>
    </div>
    <!-- 主要是理解$attrs与$listeners这两个属性-->
    <script>
        Vue.component('child1',{ 
   
            inheritAttrs: true,
            props:['a-child1'],
            mounted(){ 
   
                console.log(this.$attrs);
                console.log(this.$listeners);
            },
            methods:{ 
   
               test1(){ 
   
                this.$emit('test1')
               }
            },
            template:`<div>{ 
    {$attrs.name1}}:{ 
    {aChild1}}</br> attrs:{ 
    {this.$attrs}}</br><button @click="test1">test1</button><child2 v-on="$listeners" v-bind='$attrs'></child2></div>`
        });
        Vue.component('child2',{ 
   
            inheritAttrs: true,
            props:['a-child2'],
            mounted(){ 
   
                console.log(this.$attrs);
                console.log(this.$listeners);
            },
            template:`<div>{ 
    {$attrs.name2}}:{ 
    {aChild2}}</br> attrs:{ 
    {this.$attrs}}</br> <button @click='$listeners.test2'>test2</button></div>`
        });
        var app = new Vue({ 
   
            el:"#app",
            data:{ 
   
                aChild1:'加油',
                aChild2:'努力',
            },
            methods:{ 
   
                test1(){ 
   
                    console.log('child1---')
                },
                test2(){ 
   
                    console.log('child2---')
                }
            }
        });
    </script>
</body>
</html>

上例中,父组件在child1组件中设置两个监听事件test1和test2,分别在child1组件和child1组件内部的child2组件中执行。还设置了三个属性aChild1、aChild2、name1、name2、attrs。其中aChild1、aChild2被对应的组件的prop识别。所以:
child1组件中$attrs为{ “a-child2”: “努力”, “name1”: “组件1”, “name2”: “组件2”, “attrs”: “attrs” };
child2组件中$attrs为{ “name1”: “组件1”, “name2”: “组件2”, “attrs”: “attrs” }
效果如下图:

vue $listeners $attr_vue query child1组件中的\$attrs和\$listeners打印的内容,其中\$attrs不包括通过自身组件中设置的props传进来的值。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020062617420676.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9saW5saWZl,size_16,color_FFFFFF,t_70#pic_center)

child2组件中的$attrs和$listeners打印的内容
在这里插入图片描述

3、inheritAttrs
  • 2.4.0新增
  • 类型 boolean
  • 默认值:true
  • 详细
    默认情况下父作用域的不被认作 props 的特性绑定 (attribute bindings) 将会“回退”且作为普通的 HTML
    特性应用在子组件的根元素上。当撰写包裹一个目标元素或另一个组件的组件时,这可能不会总是符合预期行为。通过设置 inheritAttrs 到false,这些默认行为将会被去掉。而通过 (同样是 2.4 新增的) 实例属性 $attrs 可以让这些特性生效,且可以通过v-bind 显性的绑定到非根元素上。inheritAttrs设置为false,不影响$attrs,子组件通过$attrs依然可以获取到父组件传过来的属性值。
注意:这个选项不影响 class 和 style 绑定

vm.$listeners的案例如果 inheritAttrs设置为false,html显示如下:

vue $listeners $attr_vue query

如果inheritAttrs设置为true,html显示如下:
vue $listeners $attr_vue query

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183676.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm断点怎么用_idea如何打断点调试

    pycharm断点怎么用_idea如何打断点调试如何进行断点调试1添加断点2调试断点3调试到下一个断点4关于断点调试的说明4.1stepinto4.2stepover4.3stepout5快捷键6参考本文是基于pycharm2019.12的版本撰写的。1添加断点断点的添加方法:在代码的行标前面左键单击即可,如下图所示注意:被注释了的代码行是添加不了断点的!!!2调试断点两种方法,效果都是一样的:点击那个绿色的甲虫图标,开始断点调试,如下图,或者使用右键,选中debug,开始断点调试,如下

    2022年8月25日
    4
  • 软件测试面试题及答案2020_软件测试面试题目100及最佳答案

    软件测试面试题及答案2020_软件测试面试题目100及最佳答案1.性能测试关注的指标是什么?从外部看,性能测试主要关注如下三个指标:吞吐量:每秒钟系统能够处理的请求数、任务数响应时间:服务员处理一个请求或一个任务的耗时错误率:一次请求中结果出错的请求所占比例从服务器的角度看,性能测试主要关注CPU、内存、服务器负载、网络、磁盘IO等。2.性能测试是怎么做的?/如果你要进行性能测试,你是如何展开操作的?1.确定关键业务,关键路径;2.确定测试的关键数据。比如并发量,响应时间,循环次数等;3.准备测试环境,完成脚本录制或脚本开发;4.执行测试,观察或监控输出参数,比如吞

    2022年9月1日
    0
  • CentOS 7安装教程(图文详解)

    CentOS 7安装教程(图文详解)CentOS7安装教程: 准备:软件:VMwareWorkstation镜像文件:CentOS-7-x86_64-bin-DVD1.iso(附:教程较为详细,注释较多,故将操作的选项进行了加粗字体显示。) 1、文件–新建虚拟机–自定义2、…

    2022年6月13日
    61
  • 用自己的电脑搭建Web服务器建网站

    用自己的电脑搭建Web服务器建网站    这个也是个醉,上课时候在机房搭建成功了,结果回来很长时间没有管,居然给忘了,最近要写电子商务的作业,没办法,只能在捡起来了,又在自己电脑上搭建了一遍,过程都忘了,结果叫好友帮忙,谁知还是不行,还好我记得默认文档要改,这才成功搭建出来,不说了,开始今天的主题吧。搭建Web服务器建网站过程:1、当然是启用功能了window控制面板–&gt;程序与功能–&gt;启用或关闭W…

    2022年5月28日
    36
  • 性能调优从哪几个方面入手_cbq是什么意思

    性能调优从哪几个方面入手_cbq是什么意思看了很多的帖子发现很多人都在论坛里写到说CBQ也就是用tc对宽带限速效果不好的论点,其实不是这样的,在后面我们会说到这方面问题怎样解决,但是现在我们还是说点基础知识吧!在对网络宽带进行控制的时候我们通常的选择有两种:CBQ和HTB。

    2022年10月28日
    0
  • matlab画图常用符号,matlab画图特殊符号[通俗易懂]

    matlab画图常用符号,matlab画图特殊符号[通俗易懂]在MATLAB中使用LaTex字符1.Tex字符表在text对象的函数中(函数title、xlabel、ylabel、zlabel或text),说明文字除使用标准的ASCII字符外,还可……matlab特殊字符_工学_高等教育_教育专区。本文说明了matlab中如何输入特殊字符,如希腊字母字符映射表C:\\WINDOWS\\system32\\charmap….

    2022年9月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号