vue attr,vue3 $attrs

  vue attr,vue3 $attrs

  本文主要介绍了vue$attrs的综合分析使用,具有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。

  

目录

   $attrs vue的用法下面是一个使用$ attrs的例子:1。父组件(Father.vue)2。子组件(Child.vue)3。孙儿组件(孙儿. vue)$ attrs到底是什么?我们来看看官方文件中给出的定义。

  

$attrs的使用vue

  在vue 2.40版本之上增加了$attrs。项目中有多层组件可以使用$attrs传递参数,这样可以让代码更美观、更简洁、更方便维护。如果用普通的父子组件传递prop和$emit,$on会比较繁琐;如果用vuex,那就大材小用了。只在这些组件中使用,所以不需要使用Vuex使用了eventBus eventbus,如果使用不当,事件可能会执行多次。如果props没有接收到传递给组件的数据,它将被用作组件的HTML元素的属性,这些元素被绑定到组件的HTML根元素。inheritAttrs: false表示不希望这个组件的根元素继承父组件的属性,父组件传递的属性(子组件的props没有接收到属性),不会显示在子组件的dom元素上,但是可以通过它的$attrs获取未使用的注册属性。inheritAttrs: false是不会影响样式和类的绑定。

  

以下是$attrs的使用示例

  父组件的列表行数据传递给孙子组件展示

  

1.父组件(Father.vue)

  将数据与子组件相关联。如果props没有接收到子组件,这些数据将作为通用HTML特性应用到子组件的根元素。

  模板

  差异

  el-table :data=list

  El-表格-列

  prop=name

  Label= name

  /El-表格-列

  El-表格-列

  学习

  Label=“研究对象”

  /El-表格-列

  El-表格-列标签=操作

  模板槽-范围=“范围”

  El-button @ click= transmitclick(scope . row) pass/El-button

  /模板

  /El-表格-列

  /el-table

  !-子组件-

  儿童视图

  :is-show=isOpen

  :row=row

  /ChildView

  /div

  /模板

  脚本

  从导入ChildView。/Child.vue

  导出默认值{

  组件:{ ChildView },

  data() {

  返回{

  isOpen:假,

  第行:{},

  列表:[

  {姓名:王力,学习: Java},

  {名称:喜欢,学习: Python}

  ]

  }

  },

  方法:{

  //传递事件

  transmitClick(row) {

  this.isOpen=true

  this.row=row

  }

  }

  }

  /脚本

  

2.儿子组件(Child.vue)

  中间层作为父组件和孙组件之间的传输中介,将v-bind=$attrs 添加到子组件中的孙组件,以便孙组件可以接收数据。

  模板

  div class=子视图

  p组件/p

  孙v-bind= $ attrs /孙

  /div

  /模板

  脚本

  从导入孙代。/孙儿. vue

  导出默认值{

  //继承所有父组件的内容

  继承人:没错,

  组件:{孙},

  data() {

  返回{

  }

  }

  }

  /脚本

  style lang=stylus 。子视图{

  边距:20像素

  边框:2px纯红

  填充:20px

  }

  /风格

  

3.孙子组件(GrandChild.vue)

  确保在孙子组件中使用props来接收从父组件传递的数据。

  模板

  div class=grand-child-view

  Pgrandson组件/p

  p数据传递到子组件:{{row.name}} {{row.name!==未定义?学习: }} {{row.study}}/p

  /div

  /模板

  脚本

  导出默认值{

  //不想继承所有父组件的内容,同时不显示组件根元素dom上的属性。

  inheritantrs:false,

  //在这个组件中,需要接收父组件传递过来的数据。请注意,props中的参数名称不能更改,它们必须与从父组件传递的参数名称相同。

  道具:{

  isShow: {

  类型:布尔型,

  错误

  },

  第行:{

  类型:对象,

  de default:()={ }

  }

  }

  }

  /脚本

  style lang=stylus 。孙子视图{

  边框:2px纯绿色

  填充:20px

  边距:20像素

  }

  /风格

  结果:

  如上所述,如果props没有接收到传递给子组件的数据,该数据将被用作子组件的特征,并且这些特征被绑定到组件的HTML根元素。在vue2.40版本之后,这些特征是否显示在dom元素上可以通过inheritAttrs=false来控制。

  例如,在案例中,父组件传递给子组件的row和isShow并没有被使用props的子组件接收到,这两个数据直接作为HTML的特殊属性。

  子组件使用inheritAttrs=true,则属性显示在dom上;如果设置为false,则属性不会显示在dom上。

  

$attrs到底是什么?

  

先来看看官方文档给的定义

  在父范围中包含未被识别(和获取)为正确的属性绑定(类和样式除外)。当一个组件没有声明任何prop时,它会包含所有父作用域(除了class和style)的绑定,可以通过v-bind=$attrs 传入内部组件3354。这在创建高级组件时非常有用。

  既然来了,继续往下看!

  既然关系到组件之间的数据传输,就不多说了,直接上栗子:

  div id=应用程序

  家长:{{msg}}

  子组件v-bind:msg= msg /子组件

  /div

  让vm=new Vue({

  埃尔: #app ,

  数据:{

  消息:“baseDom”

  },

  //使用道具接收

  组件:{

  子组件:

  道具:[

  “味精”

  ],

  模板:` divSon:孙子组件v-bind:msg= msg /孙子组件/div `,

  组件:{

  孙子组件:

  道具:[

  “味精”

  ],

  模板:` div sun:{ { msg } }/div ` 1

  }

  }

  }

  }

  })

  在根组件中调用son-component,绑定变量msg在根组件数据中;这时,味精;可以通过在子组件中定义props来接收;然后在子组件中定义孙子组件组件,绑定msg;此时,孙子-组件可以接收msg通过定义道具来定义子组件;仔细翻看组件代码,发现msg只在子组件组件中起传输作用;有没有其他解决值冗余的方法?不问,只问;让vm=new Vue({

  埃尔: #app ,

  数据:{

  消息:“baseDom”

  },

  //使用$attrs接收

  组件:{

  子组件:

  //道具:[

  //消息

  //],

  模板:` divSon:孙子组件v-bind= $ attrs /孙子组件/div `,

  组件:{

  孙子组件:

  道具:[

  “味精”

  ],

  模板:` div sun:{ { msg } }/div ` 1

  }

  }

  }

  }

  })

  起初,味精;子组件中不再接收根组件的;子组件组件调用孙子组件组件并绑定主角$ attrs即根成分msg可以接收;总结:多级组件传递值时,调用目标组件绑定$attrs直接获取根组件传递的参数,而不是由每一级组件逐层传递。

  以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: