小程序第三讲 组件间传值 props

小程序第三讲 组件间传值 props

  • 写在前面的话
    • props 传值
    • 上面提到的props方法跟vue同样适用
    • 结束语
    • 项目地址

写在前面的话

上一篇我们讲到了项目的上手,这一讲我们围绕着wepy(vue)的一些特性方法来进行讲解

上一篇我们提到了一些遗留问题:
小程序第三讲 组件间传值 props_第1张图片
现在我们开始填写第一个坑 父子组件之间传递数值

props 传值

props传值在WePY中属于父子组件之间传值的一种机制,包括静态传值与动态传值。

在props对象中声明需要传递的值,静态传值与动态传值的声明略有不同,具体可参看下面的示例代码。

  1. 静态传值

静态传值为父组件向子组件传递常量数据,因此只能传递String字符串类型。

在父组件template模板部分的组件标签中,使用子组件props对象中所声明的属性名作为其属性名来接收父组件传递的值。

<child title="mytitle">child>

// child.wpy
props = {
    title: String
};

onLoad () {
    console.log(this.title); // mytitle
}
  1. 动态传值

动态传值是指父组件向子组件传递动态数据内容,父子组件数据完全独立互不干扰。但可以通过使用 .sync修饰符 来达到父组件数据绑定至子组件的效果,也可以通过设置子组件props的 twoWay: true 来达到子组件数据绑定至父组件的效果。那如果既使用.sync修饰符,同时子组件props中添加的twoWay: true时,就可以实现数据的双向绑定了。

注意:下文示例中的twoWay为true时,表示子组件向父组件单向动态传值,而twoWay为false(默认值,可不写)时,则表示子组件不向父组件传值。这是与Vue不一致的地方,而这里之所以仍然使用twoWay,只是为了尽可能保持与Vue在标识符命名上的一致性。

在父组件template模板部分所插入的子组件标签中,使用:prop属性(等价于Vue中的v-bind:prop属性)来进行动态传值。

// parent.wpy



data = {
    parentTitle: 'p-title'
};


// child.wpy

props = {
    // 静态传值
    title: String,

    // 父向子单向动态传值
    syncTitle: {
        type: String,
        default: 'null'
    },

    twoWayTitle: {
        type: String,
        default: 'nothing',
        twoWay: true
    }
};

onLoad () {
    console.log(this.title); // p-title
    console.log(this.syncTitle); // p-title
    console.log(this.twoWayTitle); // p-title

    this.title = 'c-title';
    console.log(this.$parent.parentTitle); // p-title.
    this.twoWayTitle = 'two-way-title';
    this.$apply();
    console.log(this.$parent.parentTitle); // two-way-title.  --- twoWay为true时,子组件props中的属性值改变时,会同时改变父组件对应的值
    this.$parent.parentTitle = 'p-title-changed';
    this.$parent.$apply();
    console.log(this.title); // 'c-title';
    console.log(this.syncTitle); // 'p-title-changed' --- 有.sync修饰符的props属性值,当在父组件中改变时,会同时改变子组件对应的值。
}

上面提到的props方法跟vue同样适用

有兴趣的小伙伴可以自行研究

结束语

喜欢加个关注支持一下后续会有更多更新内容,我好困啊我要睡觉了

项目地址

https://github.com/crobotvip/smallshop.git

你可能感兴趣的:(微信小程序WePY)