微信小程序开发5

这篇具有很好参考价值的文章主要介绍了微信小程序开发5。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、自定义组件-插槽

1.1、什么是插槽

在自定义组件的wxml结构中,可以提供一个<slot>节点(插槽),用于承载组件使用者提供的wxml结构

1.2、单个插槽

在小程序中,默认每个自定义组件中允许使用一个<slot>进行占位,这种个数上的限制叫做单个插槽
组件的封装者
<view class="wrapper">
    <view>这里是组件的内部节点</view>
    <!-- 对于不确定的内容,可以使用<slot>进行占位,具体的内容由组件的使用者决定 -->
    <slot></slot>
</view>
组件的使用者
<component-tag-name>
    <!-- 这部分内容将被放置在组件<slot>的位置上 -->
    <view>这里是插入到组件slot中的内容</view>
</component-tag-name>

1.3、启用多个插槽

在小程序的自定义组件中,需要使用多<slot>插槽时,可以在组件的.js文件中,通过如下方式进行启用
示例代码如下:
Component({
    options:{
        multipleSlots:true  // 在组件定义时的选项启用多slot支持
    },
    properties:{/* ... */},
    methods:{/* ... */}
})

1.4、定义多个插槽

可以在组件的.wxml中使用多个<slot>标签,以不同的name来区分不同的插槽,示例代码如下:
组件模板
<view class="wrapper">
    <!-- name为before的第一个slot插槽 -->
    <slot name="before"></slot>
    <view>这是一段固定的文本内容</view>
    <!-- name为after的第二个slot插槽 -->
    <slot name="after"></slot>
</view>

1.5、使用多个插槽

在使用带有多个插槽的自定义组件时,需要用slot属性来将节点插入到不同的<slot>中,示例代码如下:
引用组件的页面模板
<component-tag-name>
    <!-- 这部分内容将被放置在组件<slot name="before">的位置上 -->
    <view slot="before">这里是插入到组件slot name="before"中的内容</view>
    <!-- 这部分内容将被放置在组件<slot name="after">的位置上 -->
    <view slot="after">这里是插入到组件slot name="after"中的内容</view>
</component-tag-name>

二、自定义组件-父子组件之间的通信

2.1、父子组件之间通信的3种方式

属性绑定:用于父组件向子组件的指定属性设置数据,仅能设置JSON兼容的数据
事件绑定:用于子组件向父组件传递数据,可以传递任意数据
获取组件实例:父组件还可以通过this.selectComponent()获取子组件实例对象,这样就可以直接访问子组件的任意数据和方法

2.2、属性绑定

属性绑定用于实现父向子传值,而且只能传递普通类型的数据,无法将方法传递给子组件,父组件的示例代码如下:
// 父组件的data节点
data:{count:0}
// 父组件的wxml结构
<my-test count="{{count}}"><my-test>
<view>-----</view>
<view>父组件中:count值为:{{count}}</view>
子组件在properties节点中声明对应的属性并使用,示例代码如下:
// 子组件的properties节点
properties:{
    count:Number
}
// 子组件的wxml结构
<text>子组件中,count值为:{{count}}<text>

2.3、事件绑定

事件绑定用于实现子向父传值,可以传递任何类型的数据,使用步骤如下:
1 在父组件的js中,定义一个函数,这个函数即将通过自定义事件的形式,传递给子组件
    // 在父组件定义的syncCount方法
    // 将来,这个方法会被传递给子组件,供子组件进行调用
    syncCount(){console.log('syncCount')},
2 在父组件的wxml中,通过自定义事件的形式,将步骤1中定义的函数引用,传递给子组件
    <!-- 使用bind:自定义事件名称 -->
    <my-test count="{{count}}" bind:sync="syncCount"></my-test>
    <!-- 或者bind后面直接写上自定义事件名称 -->
    <my-test count="{{count}}" bindsync="syncCount"></my-test>
3 在子组件的js中,通过调用this.triggerEvent('自定义事件名称',{/*参数对象*/}),将数据发送到父组件
    // 子组件的wxml结构
    <text>子组件中,count值为:{{count}}</text>
    <button type="primary" bindtap="addCount">+1</button>
    // 子组件的js代码
    methods:{
        addCount(){
            this.setData({count:this.properties.count+1})
            this.triggerEvent('sync',{value:this,properties.count})
        }
    }
4 在父组件的js中,通过e.detail获取到子组件传递过来的数据
    syncCount(e){
        this.setData({count:e.detail.value})
    }

2.4、获取组件实例

可在父组件里调用this,selectComponent("id或class选择器"),获取子组件的实例对象,从而直接访问子组
件的任意数据和方法,调用时需要传入一个选择器,例如this.selectComponent(".my-component")
<my-test count="{{count}}" bind:sync="syncCount" class="customA" id="cA"></my-test>
<button bindtap="getChild">获取子组件实例</button>
getChild(){ // 按钮的tap事件处理函数
    // 切记下面参数不能传递标签选择器"my-test",不然返回的是null
    const child = this.selectComponent('.customA')  // 也可以传递id选择器#cA
    child.setData({count:child.properties.count+1}) // 调用子组件的setData方法
    child.addCount()    // 调用子组件的addCount方法
}

三、自定义组件-behaviors

3.1、什么是behaviors

behaviors是小程序中,用于实现组件间代码共享的特性,类似于Vue.js中的"mixins"

3.2、behaviors的工作方式

每个behavior可以包含一组属性、数据、生命周期函数和方法,组件引用它时,它的属性、数据和方法会被合并到组件中每个组件可以引用多个behavior,behavior也可以引用其他behavior

3.3、创建behavior

调用Behavior(Object object)方法即可创建一个共享的behavior实例对象,供所有的组件使用:
// 调用Behavior()方法,创建实例对象
// 并使用module.exports将behavior实例对象共享出去
module.exports=Behavior({
    // 属性节点
    properties:{},
    // 私有数据节点
    data:{username:'zs'},
    // 事件处理函数和自定义方法节点
    methods:{},
    // 其他节点...
})

3.4、导入并使用behavior

在组件中,使用require()方法导入需要的behavior,挂载后即可访问behavior中的数据或方法,示例代码如下:
// 1 使用require()导入需要的自定义behavior模块
const myBehavior=require("../../behaviors/my-behavior")
Component({
    // 2 将导入的behavior实例对象,挂载到behaviors数组节点中,即可生效
    behaviors:[myBehavior],
    // 组件的其他节点...
})

3.5、behavior中所有可用的节点

可用的节点       类型              是否必填      描述
properties     Object Map          否        同组件的属性
data           Object              否        同组件的数据
methods        Object              否        同自定义组件的方法
behaviors      String Array        否        引入其他的behavior
created        Function            否        生命周期函数
attached       Function            否        生命周期函数
ready          Function            否        生命周期函数
moved          Function            否        生命周期函数
detached       Function            否        生命周期函数

3.6、同名字段的覆盖和组合规则

组件和它引用的behavior中可以包含同名的字段,此时可以参考如下3种同名的处理规则
1 同名的数据字段(data)
2 同名的属性(properties)或方法(methods)
3 同名的生命周期函数
关于详细的覆盖和组合规则,大家可以参考微信小程序官方文档给出的说明

四、使用npm包

小程序对npm的支持与限制:
目前,小程序已经支持使用npm安装第三方包,从而提高小程序的开发效率,但是,在小程序中使用
npm包有如下3个限制:
        1 不支持依赖于Node.js内置库的包
        2 不支持依赖于浏览器内置对象的包
        3 不支持依赖于C++插件的包

五、使用npm包-Vant Weapp

5.1、什么是Vant Weapp

Vant Weapp是有赞前端团队开发的一套小程序UI组件库,助力开发者快速搭建小程序应用,它所使用的是
MIT开源许可协议,对商业使用比较友好
官方文档地址:https://youzan.github.io/vant-weapp

5.2、安装Vant组件库

在小程序项目中,安装Vant组件库主要分为如下3步:
        1 通过npm安装npm i @vant/weapp -S --production
        2 构建npm包
        3 修改app.json

5.3、使用Vant组件

安装完Vant组件库之后,可以在app.json的usingComponents节点中引入需要的组件,即可在wxml中
直接使用组件,示例代码如下:
"usingComponents": {
  "van-button":"@vant/weapp/button/index"
}
<van-button type="primaty">按钮</van-button>

5.4、定制全局主题样式

在app.wxss中,写入css变量,即可对全局生效:
page{
    /* 定制警告按钮的背景颜色和边框颜色 */
    --button-danger-background-color:#C00000;
    --button-danger-border-color:#D60000;
}

六、使用npm包-API Promise化

6.1、基于回调函数的异步API的缺点

默认情况下,小程序官方提供的异步API都是基于回调函数实现的,例如,网络请求的API需要按照如下的方式调用:
wx.request({
    method:'',
    url:'',
    data:{},
    success:()=>{}, // 请求成功的回调函数
    fail:()=>{}, // 请求失败的回调函数
    complete:()=>{} // 请求完成的回调函数
})

6.2、什么是API Promise化

API Promise化,指的是通过额外的配置,将官方提供的。基于回调函数的异步API,升级改造为基于
Promise的异步API,从而提高代码的可读性、维护性,避免回调地狱的问题

6.3、实现API Promise化

在小程序中,实现API Promise化主要依赖于miniprogram-api-promise这个第三方的npm包,它的安装
和使用步骤如下:
npm install --save miniprogram-api-promise@1.0.4
// 在小程序入口文件中(app.js),只需调用一次promisifyAll()方法
// 即刻实现异步API的Promise化
import {promisifyAll} from 'miniprogram-api-promise'
const wxp=wx.p={}
promisifyAll(wx,wxp)

6.4、调用Promise化之后的异步API

async getInfo(){
    const {data:res}=await wx.p.request({
        method:"GET",
        url:"https://www.escook.cn/api/get",
        data:{name:'zs',age:100}
    })
    console.log(res)
},
<van-button type="danger" bindtap="getInfo">vant按钮</van-button>

七、全局数据共享

7.1、什么是全局数据共享

全局数据共享(又叫做:状态管理)是为了解决组件之间数据共享的问题
开发中常用的全局数据共享方案有:Vuex、Redux、MobX等

7.2、小程序中的全局数据共享方案

在小程序中,可使用mobx-miniprogram配合mobx-miniprogram-bindings实现全局数据共享,其中:
mobx-miniprogram用来创建Store实例对象
mobx-miniprogram-bindings用来把Store中的共享数据或方法,绑定到组件或页面中使用

八、全局数据共享-MobX

8.1、安装MobX相关的包

在项目中运行如下的命令,安装MobX相关的包:
npm install --save mobx-miniprogram@4.13.2 mobx-miniprogram-bindings@1.2.1
注意:MobX相关的包安装完毕之后,记得删除miniprogram_npm目录后,重新构建npm文章来源地址https://www.toymoban.com/news/detail-604968.html

8.2、创建MobX的Store实例

import {observable,action} from 'mobx-miniprogram'
export const store = observable({
    // 数据字段
    numA:1,
    numB:2,
    // 计算属性
    get sum(){return this.numA+this.numB},
    // actions方法,用来修改store中的数据
    updateNum1:action(function(step){
        this.numA+=step
    }),
    updateNum2:action(function(step){
        this.numB+=step
    }),
})

8.3、将Store中的成员绑定到页面中

// 页面的.js文件
import {createStoreBindings} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'
Page({
    onLoad:function(){  // 生命周期函数--监听页面加载
        this.storeBindings=createStoreBindings(this,{
            store,
            fields:['numA','numB','sum'],
            actions:['updateNum1']
        })
    },
    onUnload:function(){    // 生命周期函数--监听页面卸载
        this.storeBindings.destoyStoreBindings()
    }
})

8.4、在页面上使用Store中的成员

// 页面的.wxml结构
<view>{{numA}}+{{numB}}={{sum}}</view>
<van-button type="primary" bindtap="btnHandler1" data-step="{{1}}">numA+1</van-button>
<van-button type="danger" bindtap="btnHandler1" data-step="{{-1}}">numA-1</van-button>
// 按钮tap事件的处理函数
btnHandler1(e){this.updateNum1(e.target.dataset.step)}

8.5、将Store中的成员绑定到组件中

import {storeBindingsBehavior} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store'
Component({
    behaviors:[storeBindingsBehavior],  // 通过storeBindingsBehavior来实现自动绑定
    storeBindings:{
        store,  // 指定要绑定的Store
        fields:{    // 指定要绑定的字段数据
            numA:()=>store.numA,    // 绑定字段的第1种方式
            numB:(store)=>store.numB,  // 绑定字段的第2种方式
            sum:'sum'   // 绑定字段的第3种方式
        },
        actions:{   // 指定要绑定的方法
            updateNum2:'updateNum2'
        }
    }
})

8.6、在组件中使用Store中的成员

// 组件的.wxml结构
<view>{{numA}}+{{numB}}={{sum}}</view>
<van-button type="primary" bindtap="btnHandler2" data-step="{{1}}">numB+1</van-button>
<van-button type="danger" bindtap="btnHandler2" data-step="{{-1}}">numB-1</van-button>
// 组件的方法列表
methods:{
    btnHandler2(e){this.updateNum2(e.target.dataset.step)}
}

到了这里,关于微信小程序开发5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序开发之微信小程序交互

    目录 一、小程序交互 前端: 1、先在登陆界面中编写代码 2、在前端中编写js代码 后端:           1、先导入依赖:           2、定义好配置文件           3、编写好实体类           4、将帮助类进行配置           5、编写mapper类           6、定义service层以及对应的

    2024年02月09日
    浏览(59)
  • 微信小程序 -- 小程序开发能力与拓展

    1. 获取用户头像 当小程序需要让用户完善个人资料时,我们可以通过微信提供的头像、昵称填写能力快速完善。如图: 想使用微信提供的头像填写能力,需要两步: 将 button 组件 open-type 的值设置为 chooseAvatar 当用户选择需要使用的头像之后,可以通过 bindchooseavatar 事件回调

    2024年04月15日
    浏览(64)
  • 【微信小程序开发零基础入门】——微信小程序入门

    学习小程序跟学习网页开发有什么不同 1.如何创建微信小程序项目 1.1 注册、登录、复制appId 注册:在 https://mp.weixin.qq.com/cgi-bin/wx 进行注册微信小程序开发账号 登录:在 https://mp.weixin.qq.com 登录小程序账号 复制appId: 在 \\\"开发\\\" 的 \\\"开发管理\\\" 的 \\\"开发设置\\\" 的 \\\"开发者ID\\\"中 1.2 下

    2024年02月03日
    浏览(63)
  • 【微信小程序开发】微信小程序集成腾讯位置项目配置

    腾讯位置服务官网 当然没账号的要先注册一个账号 在我的应用里创建一个新的应用,印象中需要小程序ID,去微信开发者工具里面找到自己的小程序ID填入即可 添加 key 中勾选勾选 WebServiceAPI 从官网里下载,我这里下载的是 v1.2 打开微信开发者工具 在查找小程序ID的地方下滑

    2024年02月02日
    浏览(62)
  • 小程序入门笔记(一) 黑马程序员前端微信小程序开发教程

    微信小程序基本介绍 小程序和普通网页有以下几点区别: 运行环境:小程序可以在手机的操作系统上直接运行,如微信、支付宝等;而普通网页需要在浏览器中打开才能运行。 开发技术:小程序采用前端技术进行开发,如HTML、CSS、JavaScript等;而普通网页也是使用类似的前

    2024年02月08日
    浏览(65)
  • 微信小程序开发入门与实战 ①(初始微信小程序)

    @作者 : SYFStrive   @博客首页 : HomePage 📜: 微信小程序 📌: 个人社区(欢迎大佬们加入) 👉: 社区链接🔗 📌: 觉得文章不错可以点点关注 👉: 微信小程序专栏🔗 💃: 感谢支持,学累了可以先看小段由小胖给大家带来的街舞😀 🔗: 阅读文章 👉 微信小程序 (🔥)

    2024年02月09日
    浏览(111)
  • 基于微信小程序的新闻资讯的小程序开发

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,新闻资讯被用户普遍使用,为方便用户能够可以随时进行新闻资讯的数据信息管理,特开发了基于新闻资讯的

    2024年02月03日
    浏览(52)
  • 微信小程序实战:智能水印相机小程序开发附源码

    一款智能水印相机,拍照自动添加时间、地点、经纬度等水印文字,可用于工作考勤、学习打卡、工作取证等,支持自定义内容以及给现有照片添加水印。无需安装,无需注册,即开即用。 主要是通过canvas给图片上添加上时间水印地点信息。首先通过官方API(chooseLocation)获取

    2024年02月09日
    浏览(67)
  • 微信小程序开发教程:项目一微信小程序入门 课后习题

    《微信小程序开发教程》主编/黄寿孟 易芳 陶延涛 湖南大学出版社 目录 一、单选题 二、多选题 三、判断题 四、填空题 五、简答题 1.请简述微信开发者工具中调试器功能。 2.请简述微信小程序开发环境的搭建过程。 六、编程题 1.请创建一个空白项目,在页面中输出Hello W

    2024年02月11日
    浏览(57)
  • 微信小程序开发:探索微信小程序的生命周期

    微信小程序作为一个轻量级的应用,逐渐成为企业和开发者的热门选择。在本篇博文中,我们将深入剖析微信小程序的生命周期,带领大家一起探索这个神秘世界,揭开它的面纱。 本文将覆盖以下内容: 微信小程序生命周期概述 全局 App 对象的生命周期 页面 Page 对象的生命

    2024年02月10日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包