zoukankan      html  css  js  c++  java
  • Vue $attrs / $listeners

    $attrs

    把父组件中非props属性绑定到内部组件

    $listeners

    把父组件中的DOM对象的原生事件绑定到内部组件

    1.父组件传给自定义子组件的属性,如果没有prop接收,会自动设置到子组件内部的最外层标签上, 如果是 class 或者 style 的话,会合并最外层标签的 classstyle

    <!-- 父组件 -->
    <demo class="parent-class" required placeholder="Hello vue"></demo>
    
    <!-- 子组件 -->
    <div>
     <input type="text" class="form-control" />
    </div>
    
    <!-- 不使用 $attrs 和 inheritAttrs=false -->
    <!-- 把非props的属性添加到最外层的元素上 -->
    <div required="required" placeholder="Hello vue" class="parent-class">
     <input type="text" class="form-control">
    </div>
    

    2.如果子组件不想继承父组件传入的非props属性,可以使用 inheritAttrs 禁用继承, 然后通过 v-bind="$attrs" 把外部传入的非props属性添加到希望的标签上. 但是这不会改变 classstyle(还是会把class和style添加到最外层的元素上)

    <!-- 子组件 -->
    <div>
     <input type="text" class="form-control" v-bind="$attrs" />
    </div>
    <!-- 使用$attrs 和 inheritAttrs=false -->
    <!-- 除了 class 和 style 属性都被加在指定的元素上 -->
    <div class="parent-class">
     <input type="text" required="required" placeholder="Hello vue" class="form-control">
    </div>
    

    3. 给子组件绑定事件

    <!-- 父组件 -->
    <demo class="parent-class" required placeholder="Hello vue" @focus="onFocus" @input="onInput"></demo>
    
    <!-- 子组件 -->
    <div>
        <input
          type="text"
          class="form-control"
          v-bind="$attrs"
          @input="$emit('input',$event)"
          @focus="$emit('focus',$event)"
        />
      </div>
    

    4. 通过$listeners简化事件的注册(效果同3一致)

    <!-- 父组件 -->
    <demo class="parent-class" required placeholder="Hello vue" @focus="onFocus" @input="onInput"></demo>
    
    <!-- 子组件 -->
    <input type="text" class="form-control" v-bind="$attrs" v-on="$listeners" />
    
    Keep learning
  • 相关阅读:
    mysql导出表的数据,在导入
    oracle数据迁移到mysql
    mybatis-使用generator反向数据库表并生成dao和mapping映射
    SQLserver单表数据导入导出
    java内省
    java反射
    springmvc文件上传
    Dubbo学习笔记8:Dubbo的集群容错与负载均衡策略
    Dubbo学习笔记7:Dubbo增强SPI与SPI中扩展点自动包装的实现原理
    Dubbo学习笔记6:Dubbo整体框架分析
  • 原文地址:https://www.cnblogs.com/leslie1943/p/13615163.html
Copyright © 2011-2022 走看看