vue之props、属性、事件传递:$props、$attrs、$listeners

使用介绍:
  • v-bind="$props": 可以将父组件的所有props下发给它的子组件,子组件需要在其props:{} 中定义要接受的props。
  • vm.$props: 当前组件接收到的 props 对象。Vue 实例代理了对其 props 对象属性的访问。官方介绍
  • v-bind="$attrs": 将调用组件时的组件标签上绑定的非props的特性(class和style除外)向下传递。在子组件中应当添加inheritAttrs: false(避免父作用域的不被认作props的特性绑定应用在子组件的根元素上)。
  • **vm. a t t r s ∗ ∗ : 包 含 了 父 作 用 域 中 不 作 为 p r o p 被 识 别 ( 且 获 取 ) 的 特 性 绑 定 ( c l a s s 和 s t y l e 除 外 ) 。 当 一 个 组 件 没 有 声 明 任 何 p r o p 时 , 这 里 会 包 含 所 有 父 作 用 域 的 绑 定 ( c l a s s 和 s t y l e 除 外 ) , 并 且 可 以 通 过 v − b i n d = " attrs** :包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind=" attrs:prop()(classstyle)prop(classstyle)vbind="attrs" 传入内部组件——在创建高级别的组件时非常有用。官方介绍
  • v-on=“listeners”: 将父组件标签上的自定义事件向下传递,其子组件可以直接通过this.emit(eventName)的方式调用。
  • **vm. l i s t e n e r s ∗ ∗ : 包 含 了 父 作 用 域 中 的 ( 不 含 . n a t i v e 修 饰 器 的 ) v − o n 事 件 监 听 器 。 它 可 以 通 过 v − o n = " listeners**: 包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on=" listeners:(.native)vonvon="listeners" 传入内部组件——在创建更高层次的组件时非常有用。

相关代码

  • index.vue页面
    <template>
      <div>
        <h1>props、属性、事件传递</h1>
        <app-parent test="123"  :name="name" :age="age" v-on:start1="say1" @start2="say2"></app-parent>
      </div>
    </template>

    <script>
      import AppParent from './parent.vue';
      export default {
        data() {
          return {
              name: '传给父组件的值',
              age: '18'
          };
        },
        components: {
            AppParent
        },
        methods: {
            say1() {
                console.log('第一个。。。。。');
            },
            say2() {
                console.log('第二个。。。。。');
            }
        }
      }
    </script>
  • parent.vue组件
    <template>
      <div>
          <h3>父组件</h3>
          <div>组件名上绑定的非props特性($attrs): {{$attrs}}</div>
          <app-child v-on="$listeners" v-bind="$props"></app-child>
      </div>
    </template>

    <script>
      import AppChild from './child.vue';
      export default {
        data() {
          return {

          };
        },
        inheritAttrs: false,
        props: ['name', 'age'],
        components: {
            AppChild
        },
        mounted() { 
            this.$emit('start1');
        }
      }
    </script>
  • child.vue组件
    <template>
      <div>
          <h3>子组件</h3>
          <div>父组件传递过来的名称: {{name}}</div>
          <div>父组件传递过来的年龄: {{age}}</div>
      </div>
    </template>

    <script>
      export default {
        data() {
          return {

          };
        },
        props: ['name', 'age'],
        components: {},
        created() {

        },
        mounted() {
            this.$emit('start2');
        },
      }
    </script>
七个有用的Vue开发技巧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值