父子组件通信的属性验证 validator

父子组件通信 属性验证

案列:价格的增加,拿到数据必须要做验证 防止数据是string型

使用props: 验证

  1. 1.props : [‘msg’] 没有进行验证,只是单纯的接受了一个父组件传递来的数据
  2. 2.props : {attr: attrType} 进行普通属性验证
  3. 3.props : {type:typeType,default:value} 这里的default是为了这个属性设置的初始值的
  4. props : {validator(val) {return boolean}}可以进行一个条件的比较
  5. 返回一个boolean值

注意:

  1. prop 会在一个组件实例创建之前进行验证
  2. 所以实例的 property (如 data、computed 等) 在 default 或 validator 函数中是不可用的。

<body>
    <div id="app">
        <Father></Father>
    </div>
    <template id="father">
        <div>
            <p>这个是父组件</p>
            <Son :m = "m" :n = "n"></Son>
        </div>
    </template>
    <template id="son">
        <div>
            <p>这个是子组件</p>
                 <p> {{ m }}</p>
            <p> {{ n+200 }} </p>
        </div>
    </template>
</body>


    
    <script>
        Vue.component('Father',{
             template : "#father",
             data(){
                 return {
                     m: 300,
                    n: 200
                   }
                }
        })
        Vue.component("Son",{
           template : "#son",
           props: {
                'm': Number,
                'n': {
                    validator(val){
                          return val >150
                      }
                    }
               }
        })
        new Vue({
        
        }).$mount('#app')
    </script>



代码中使用

   maxtext: {
      type: Number,
      default: 3,
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
        return value > 0;
      },
    },
 derection: {
      type: String,
      default: "right",
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
        return ["left", "right", "top", "bottom"].indexOf(value) !== -1;
      },
    },
    updateVehicleTime: {
      type: Number,
      default: 0,
      validator(val) {
        return val === 0 || val >= 15;
      }
    },
    updateVehicleTime: {
      type: Number,
      default: 0,
      validator(val) {
        return val === 0 || val >= 15;
      }
    },
    direction: {
      type: String,
      default: 'row',
      validator(val) {
        return Object.values(FlexDriecton).includes(val);
      }
    },
  updateVehicleTime: {
      type: Number,
      default: 0,
      validator(val) {
        return val === 0 || val >= 15;
      }
    },
  props: {
    // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
    propA: Number,
    // 多个可能的类型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true
    },
    // 带有默认值的数字
    propD: {
      type: Number,
      default: 100
    },
    // 带有默认值的对象
    propE: {
      type: Object,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
      }
    }
  },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

都挺好,刚刚好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值