Vue的父子组件传值:props属性和emit的使用(绝对实用)

本文详细介绍了Vue中父子组件间的通信方式,重点讲解了Props如何接收和验证父组件传递的数据,包括数据类型、默认值、必需性验证等。同时,阐述了Emit的使用,展示如何在子组件中触发事件通知父组件,以及在JS和TS中不同的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Props属性

类型: Array<string> | Object

作用:

     用于接收来自父组件的数据,它具有基于Array的简单语法和替代的基于对象的语法,允许高级配置,如类型检查,自定义验证和默认值。

  • type:可以是下列构造函数之一:StringNumberBooleanArrayObjectDateFunctionSymbol,任何定制构造函数或那些的阵列。将检查道具是否具有给定类型,如果不是,则将发出警告。
  • defaultany
    指定prop的默认值。如果未通过道具,则将使用此值。必须从工厂函数返回对象或数组默认值。
  • requiredBoolean
    定义是否需要道具。在非生产环境中,如果此值为真,并且未传递prop,则将引发控制台警告。
  • validatorFunction
    自定义验证器函数,将prop值作为唯一参数。在非生产环境中,如果此函数返回虚假值(即验证失败),则将抛出控制台警告。你可以阅读更多关于托验证这里

Emit用法

    用于子组件通知父类组件,可以进行关闭的相关处理了。

实例:

父组件定义:

<el-dialog title="显示的标题" center :visible="dialogFormVisible" @open="onUserSetOpen()" width="600px" @close="closeShowList">

       <user-show-list :userId="userId" @closeUserAdd="closeShowList" ref="user-show-list"></user-show-list>

</el-dialog>

export default {

  data(){

        return{

             userId: ""

        }

   },

   method:{

       closeShowList(){ //用于监控子组件emit中的方法closeUserAdd或点击dialog的对话框时,用于关闭当前dialog 

          this.dialogFormVisible=false;

          this.search()

        },

        onUserSetOpen(){  // 此方法用于打开子组件时,可以调用子组件的方法进行初始化
            this.$nextTick(() => {
              let form = this.$refs["user-show-list"];
              form.initPage();  //此方法为子组件的方法,可以用于清空子组件的model中的值,也可以调用初始化方法
            });
      },

   }

}

子组件获取:

Vue.component('props-demo-advanced', {
  props: {
    // type check
    userId: Number,
    // type check plus other validations
    age: {
      type: Number,
      default: 0,
      required: true,
      validator: function (value) {
        return value >= 0
      }
    }
  }
})

########################

JS中的写法:

export default {
  props:["userId"], //接收到父id的属性,主要Vue是懒加载,如果不监控,此处不会获取不同的userId, 因此需要watch去监控

   watch: {
       'userId':{
         // 因为userID是值类型,所以每次都能监听到变化
          immediate:true,
          handler:function(val){
            if(!val) return;
            this.onUserIdChange(val);
          }
      }
  },
  data(){
    return{
    }
  },

  close(){ //点击该页面的“确定”或“取消”时调用

       this.$emit("closeUserAdd"); //用于通知父组件,此页面结束了,可以关闭了

  }
}

在ES6之后,TS+Vue的写法:

export default class UserRouter extends Vue {
  @Prop({ required: true })
  userId;

  @Emit("closeUserAdd")

   close(){}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值