Vue-Prop

作者: bouble | 来源:发表于2018-04-03 16:47 被阅读49次

    一、Prop的数据流

    父子组件的关系:prop向下传递,事件向上传递。父组件通过prop给子组件下发数据,子组件通过事件给父组件发送消息。如图

    组件数据流动

    组件的作用域是孤立的。因此子组件的模板内不能直接饮用父组件的数据,必须通过prop传递到子组件内。

    通过v-bind的方式绑定prop把父组件的数据向子组件传递。

    但是如上图,prop是单向绑定的:当父组件的属性变化时,将会传递给子组件,但是反过来则不会;目的:防止子组件无意间修改了父组件的状态。

    处理的方案:

    1.在子组件内定义一个局部变量,并且用prop的值初始化:

    props: ['initialCounter'],

    data:function(){

    return{counter:this.initialCounter }

    }

    2.定义一个计算属性,处理prop的值并且返回:

    props: ['size'],

    computed: {

    normalizedSize: function () {

    return this.size.trim().toLowerCase()

    }

    }

    注意:

    在JavaScript中对象和数组都是引用类型,指向的同一个内存空间,因此在prop为一个对象或者数组时,在子组件的内部改变它仍然会影响到父组件的状态

    二、Prop验证

    组件的prop指定验证规则,如传入的数据不符合要求,Vue会发出警告,对于开发他人使用的组件非常有用。

    要指定验证规则,需要用对象的形式来定义prop,而不能用字符串数组:

    Vue.component('example', {

    props: {

    // 基础类型检测 (`null` 指允许任何类型)

    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 value > 10 }

    }

    }

    })

    相关文章

      网友评论

          本文标题:Vue-Prop

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