前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序组件调用和传值

微信小程序组件调用和传值

作者头像
越陌度阡
发布2020-11-26 15:03:43
1.4K0
发布2020-11-26 15:03:43
举报

微信小程序像Vue和React一样赋于了组件的开发能力,支持组件的调用和传值,同时由于小程序上传时限制在2MB以内,对于稍微大一点的小程序组件的使用就特别重要了,下面给大家介绍下小程序的组件用法。

1. 封装子组件

在项目根目录下定义components文件夹,新建一个header和footer的文件夹,像小程序的页面一样分别定义js、wxss、wxml、json文件。

header子组件的wxml

代码语言:javascript
复制
<view class="box">
    <view class='header'>
        {{msg}}
    </view>
    <button bindtap='run' size='mini'>接收父组件给的数据</button>
</view>

header子组件的js

代码语言:javascript
复制
Component({
    // 组件的属性列表
    properties: {
        // 接受父组件的给的数据
        title: {
            type: "String",
            value: ""
        }
    },
    // 组件的初始数据
    data: {
        msg: '头部组件'
    },
    // 组件的方法列表
    methods: {
        run() {
            this.setData({
                // 通过this.data获取父组件里传过来的值
                msg: this.data.title
            });
        },
        childRun() {
            console.log('我是子组件的方法')
        }
    }
})

footer子组件的wxml

代码语言:javascript
复制
<view>
    <button bindtap='getParent'>子组件触发父组件的方法</button>
</view>

footer子组件的js

代码语言:javascript
复制
Component({
    // 组件的属性列表
    properties: {

    },
    // 组件的初始数据
    data: {

    },
    // 组件的方法列表
    methods: {
        getParent() {
            this.triggerEvent('event', '子组件的数据')
        }
    }
})

子组件的wxss与json文件的写法没有什么特别的地方,与正常的小程序页面一样,此处省略。

2. 在父组件里调用子组件

首先在父组件里的json文件中引入子组件。

代码语言:javascript
复制
{
    "navigationBarTitleText": "用户",
    "usingComponents": {
        "header": "../../components/header/header",
        "footer": "../../components/footer/footer"
    }
}

父组件wxml

代码语言:javascript
复制
<view>
    <header id="header" title="{{title}}"></header>
    <button bindtap='getChildFn'>父组件里获取子组件的方法</button>
    <footer bindevent="run"></footer>
</view>

父组件的js

代码语言:javascript
复制
Page({
    // 页面的初始数据
    data: {
        title: '父组件给子组件的数据'
    },
    // 监听页面加载
    onLoad: function(options) {
                   
    },
    getChildFn() {
        var header = this.selectComponent("#header")
        // 父组件里面执行子组件的方法
        header.childRun(); 
        // 父组件里面直接获取子组件的数据
        // console.log(header.data.msg); 
    },
    run(e) {
        console.log('我是父组件的方法')
    }

})

3. 父组件传值给子组件

在以上的父组件中调用子组件时动态绑定title属性,在子组件header中定义了title接受值的类型,然后通过 this.data.title 就可以获取父组件传过来的title值了。

4. 父组件里调用子组件里的方法

在父组件中调用子组件时,给子组件定义一个id,如上面的id="header",在父组件中触发getChildFn方法,在getChildFn方法中通过 this.selectComponent("#header") 获取子组件对象存为header,然后就可以通过header调用子组件里的方法和数据了,如上例中的header.childRun() 即调用子组件的方法,header.data.msg 即调用子组件的数据。

5. 子组件里调用父组件的方法

在子组件footer里触发自定义的getParent方法,在getParent里通过 this.triggerEvent 传入在父组件中接收数据的事件名("event")和要接收的数据('子组件的数据'),然后在父组件绑定事件event,如上例中的 bindevent="run" ,然后在父组件里的run方法里就可以接受子组件传过来的数据了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档