美文网首页
Vue中的prop属性

Vue中的prop属性

作者: hhaann | 来源:发表于2020-01-09 22:49 被阅读0次

    用来接收父组件传给子组件的数据,可以在组件上注册一些自定义特性,当一个值传递给一个prop特性的时候,它就变成那个组件实例的一个属性。

    用法:

    // 父组件
    <child message="this is message"></child>
    
    // 在子组件中定义
    Vue.component('child', {
     ...
     props: ['message']
     ...
    })
    

    假设此时的 message 的命名被 myMessage 时,父组件应该写为:
    <child my-message="this is message"></child>
    因为HTML中的名大小写不敏感,所以浏览器会把所有大写字符解释为小写字符。

    传递静态或动态prop

    静态传入

    // 父组件
    <child message="this is message"></child>
    
    // 在子组件中定义
    Vue.component('child', {
     ...
     props: ['message']
     ...
    })
    

    动态传入

    <!-- 通过v-bind动态赋值 -->
    
    // 父组件
    <child v-bind:message="msg"></child>
    
    // 在子组件中定义
    Vue.component('child', {
     ...
     props: ['message']
     ...
    })
    

    单项数据流

    • 是单向绑定的,当父组件的属性变化时,将传导给子组件,但是不会反过来。
    • 每次父组件发生更新时,子组件中所有的Prop都将刷新为最新的值。这意味着你不应该在子组件内部改变Prop,如果你这样做了,Vue会在控制台抛出一个警告。

    1、如果子组件需要操作prop中的值,需要将prop中的值赋值给本地定义属性:

    props: ['message'],
    data: function () {
      return {
        counter: this.message
      }
    }
    

    2、这个 prop 以一种原始的值传入且需要进行转换。在这种情况下,最好使用这个 prop 的值来定义一个计算属性:

    props: ['size'],
    computed: {
      normalizedSize: function () {
        return this.size.trim().toLowerCase()
      }
    }
    

    prop验证

    我们可以为组件的 prop 指定验证要求。如果有一个需求没有被满足,则会出错。

    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
          }
        }
      }
    })
    

    相关文章

      网友评论

          本文标题:Vue中的prop属性

          本文链接:https://www.haomeiwen.com/subject/kzsuactx.html