vue2 props

vue官方文档:https://v2.cn.vuejs.org/v2/guide/components-props.html

vue父子组件之间的通信方法之一是通过在父组件使用v-bind下发数据,在子组件中使用props接受数据并通过自定义事件emit向父组件发送消息。

传入prop的几种方式

  1. 传入静态数据

    <my-component title="My Title" ></my-component>
    // 直接传入会被解析为true
    <my-component disabled ></my-component>
    
  2. 传入动态数据

    // v-bind
    <my-component v-bind:id="data.id" ></my-component>
    // 省略v-bind
    <my-component :id="data.id" ></my-component>
    // 书写表达式
    <my-component :name="data.firstname+'-'+data.name" ></my-component>
    
  3. 批量传入数据

    如果想对象中的所有 property 作为 prop 传入,可以使用 v-bind 直接传入

    data:{
    	name:'jack',
    	age:18
    };
    <my-component v-bind="data" ></my-component>
    

    等价于

    <my-component
    	v-bind:name="data.name"
        v-bind:age="data.age" 
    ></my-component>
    

单向数据流

props 所有接受的数据都 不应该 在子组件中被 改变

数组和对象可以修改并正常运行,但仍然不建议这么做

如果组件中需要对 prop 值进行额外处理

可以通过 computedwatch 进行处理

export default{
	data(){
		return {
			fullname2:"",
		}
	},
	props:["firstName","lastName"],
    // 方式一 computed
    computed:{
        fullname1(){
            return this.firstName + "-" + this.lastName
        }
    },
    // 方式二 watch
    watch:{
        firstName(val){
            this.fullname2 = val + "-" + this.lastName
        }
    }
}
prop 的几种使用方式
  1. 简单声明

    props:['name','id','age'] // 推荐
    props:{
        name:{},
        id:{},
        age:{}
    }
    
  2. 约束数据类型

    function User (id, nickName) {
      this.id = id
      this.nickName = nickName
    }
    props:{
        // 简单数据类型
        propA1:String,
        propA2:Number,
        // 通过type约束类型
        propA3:{
            type:Boolean
        },
        // 多个可能的类型
        propB: [String, Number],
        // 不常见的类型
        propC:Date,
        propD:Function,
        // 构造函数
        // 将会通过instanceof 来进行检查确认propE的值是否通过 new User 创建的
        propE:User
    }
    
  3. 默认值

    // 此时需要写成对象形式
    props:{
        // 基础数据类型的默认值
        propA:{
            type:String,
            default:'value'
        },
        propB:{
            type: Number,
            default: 100
        },
        // 默认值为对象或数组,即复杂数据类型
        // 需要通过一个函数返回
        propC:{
            type:Array,
            default:()=>{ return [] }
        },
        propD:{
            type:Object,
            default:()=>{ return {} }
        }
    }
    
  4. 是否必填

    // 通过 required:true 来配置
    // 如果没有传入必填的props,在开发环境中会报错
    props:{
        propA:{
            required:true
        }
    }
    
  5. 自定义校验

    // 通过 validator 配置
    // validator 必须返回一个检验是否通过的布尔值
    props:{
        propA:{
            validator: function (value) {
            // 这个值必须匹配下列字符串中的一个
            return ['success', 'warning', 'danger'].includes(value)
          }
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值