vue props

props 验证

组件的 props 就是组件的参数,为了确保传入的数据在可控的合理范围内,我们需要对传入的 props 的值类型进行必要的验证

Vue.component('my-component', {
  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
      }
    }
  }
})

非props特性

父传子,但是在复用组件中没有用props来接收
在数据传了的情况下,prop没有就收 就是一个非 prop 特性是指传向一个组件,
但是该组件并没有相应prop 定义的特性,这些 props 会被自动添加到组件的根元素(复用组件的跟元素)上
可以使用 this.$attrs在 复用组建中使用,但是数据多的情况下不这么写,

替换/合并已有的特性

默认情况下,非prop 特性的属性会覆盖组件根元素上同名的内容,但是针对 style
class 有特殊的处理,它们会合并(同名外面样式会覆盖,里面的优先级高)

禁用特性继承

如果你不希望组件的根元素继承特性,你可以在组件的选项中设置 inheritAttrs: false
我们可以通过组件的 this.$attrs 来获取这些属性,默认是true,如果有面向对象继承true会把继承属性关掉
> 注意 inheritAttrs: false 选项不会影响 styleclass 的绑定

    <div id="app">
        <!--                这里传了数据 -->
        <k-div :pages=age :p="00" :a="999" style="background-color: blueviolet;"></k-div>

        <div>庄三{{gender()}}</div>      
    </div>


        Vue.component("k-div",{
            inheritAttrs:false, //默认true 开启了false后:p="00" :a="999"会在dom中消失
            props:['pages'], //正常情况下props这里接收,非prop说的数这里没有接收
            template:`  <div>{{this.$attrs.a}}
                            <div style="color:red;background:green">哈哈{{this.$attrs.p}}</div>
                            <div>呵呵{{p}}</div>
                            <button @click="getData">点点我</button>
                        </div>
                        `,
            data(){
                return{
                    name:"这里的data是自身的数据",
                    p:100, // 有相同的参数名的情况下各使用各的,相互不影响
                }
            },
            methods:{
                getData(){
                    console.log(this.$attrs)//我们可以使用this.$attrs来接收
                }
            }
        })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jason–json

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

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

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

打赏作者

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

抵扣说明:

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

余额充值