Vue-Prop

一、概述

prop 是子组件用来接受父组件传递过来的数据的一个自定义属性。
父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 “prop”。


二、传递静态Prop

给 prop 传入一个静态的值:

案例:

	<div id="app">
        <apple-s title="hello world"></apple-s>
    </div>

    <script>
        Vue.component('apple-s', {
            props: ["title"],
            template: `
                <h1>{{title}}</h1>
            `
        })
        let vm = new Vue({
            el: "#app"
        })
    </script>

运行结果:
在这里插入图片描述

三、传递动态Prop

prop 可以通过 v-bind 动态赋值:

案例:

   <div id="app">
       <apple-s :title="msg"></apple-s>  //动态绑定title属性值为data数据的msg
   </div>

   <script>
       Vue.component('apple-s', {
           props:["title"],
           template: `
               <div>
                   <span>{{title}}</span>
               </div>
           `
       })
       let vm = new Vue({
           el: "#app",
           data: {
               msg: "hello"
           }
       })
   </script>

四、Prop验证

我们可以为组件的 prop 指定验证要求,例如你知道的这些类型。如果有一个需求没有被满足,则 Vue 会在浏览器控制台中警告你。这在开发一个会被别人用到的组件时尤其有帮助。

为了定制 prop 的验证方式,你可以为 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
      }
    }
  }
})

五、Prop验证的类型

类型描述
String字符串类型
Number数字类型
Boolean布尔类型
Array数组类型
Object对象类型
Date日期类型
Function函数类型
Symbol符号类型

六、非 Prop 的 Attribute

一个非 prop 的 attribute 是指传向一个组件,但是该组件并没有相应 prop 定义的 attribute。

因为显式定义的 prop 适用于向一个子组件传入信息,然而组件库的作者并不总能预见组件会被用于怎样的场景。这也是为什么组件可以接受任意的 attribute,而这些 attribute 会被添加到这个组件的根元素上。
案例:

	<div id="app">
        <apple-s type="radio" class="active"></apple-s>
    </div>

    <script>
        Vue.component('apple-s', {
            props: ['a'],
            template: `
                <div>
                    <input v-bind="a"/>
                </div>
            `
        })
        let vm = new Vue({
            el: "#app",
        })
    </script>

运行结果:

在这里插入图片描述

注意:当组件接收到一个非prop特性的时候该特性会被添加到这个组件的根元素中


七、禁用 Attribute继承

如果你不希望组件的根元素继承 attribute,你可以在组件的选项中设置 inheritAttrs: false。

适合配合实例的 $attrs property 使用,该 property 包含了传递给一个组件的 attribute 名和 attribute 值
案例:

	<div id="app">
        <apple-s type="radio" class="active"></apple-s>
    </div>

    <script>
        Vue.component('apple-s', {
            props: ["a"],
            inheritAttrs: false,
            mounted() {
                console.log(this.$attrs);
            },
            template: `
                <div>
                    <input v-bind="$attrs"/>
                </div>
            `
        })
        let vm = new Vue({
            el: "#app",
        })
    </script>

使用$attrs能够返回组件的attribute 名和 attribute 值,如下:
在这里插入图片描述
运行结果:
在这里插入图片描述
有了 inheritAttrs: false 和 $attrs,你就可以手动决定这些 attribute 会被赋予哪个元素。在撰写基础组件的时候是常会用到的。





总结:通过编写此篇博客,能够将父组件的属性静态、动态传递给子组件,子组件能够得到父组件传递来的值。Prop不只是传递数据也能设置传递数据的类型,若不符合指定类型浏览器将会给出警告。非常感想大家阅读此篇博客,如有相关问题可点击评论,后续也将更新内容,敬请期待!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值