微信小程序day04基础加强
一.自定义组件
1.1 组件的创建与引用
首先创建组件

然后我们组件的引用分为局部和全局引用
局部引用就是在当前页面能使用,在当前页面的json文件里面配置

全局引用同样的道理,注意跟page等是同级的
组件与页面的不同:
虽然都有相应的四个文件

1.2 组件样式
首先,默认情况下 组件的样式就是隔离的==,组件之间不会相互影响,小程序也不会影响到组件,组件也影响不到小程序
注意:

虽然默认情况下是隔离的,但是也可以一些设置让其不隔离

styleIsolation的属性:

1.3 数据、方法和属性
数据就是组件js里面的data节点里面的数据
方法就是组件js文件里面methods方法,区别于其他页面js的函数是直接写在里面的,组件的函数都需要写在methods里面
主要注意一点,如果不是事件的处理函数,不是由事件来触发,一般这样的函数前面都为一个_下划线

属性:properties
是组件用来接收外部传进来的一些数据

两者区别是上一种不用传值也有默认值
data和properties区别:
都是可读可写的,data倾向于存储私有数据,properties倾向于存储外部传进来的数据
properties也是通过setData来修改

1.4 数据监听器
类似于watch 这里面是 observers
要监听多个字段,直接写在一起通过,分割



同样还支持监听对象里面单个或多个属性的变化

如果是要监听对象里面所有的属性,通过两个通配符 **

而且对应的新值也是整个对象
1.5 纯数据字段
不用于界面渲染的data字段就是纯数据字段
对于这类数据用纯数据来定义更性能会更快

1.6 生命周期
组件的生命周期函数一共六个:

第一个还没有放入到页面节点树中,类似于beforeCreate
第二是放入了页面节点树,但是还没有渲染出来类似于beforeMount
最重要的一共三个:

要定义组件的生命周期,需要用到 lifetimes对象里面来写生命周期函数

还有一个就是组件所在页面的生命周期
就是当组件的行为需要依赖页面的变化的时候,但是组件能访问到页面的生命周期也不多就三个

同样的也需要写到一个对象里面, pageLifetimes

1.7 组件插槽
单个插槽
首先在组件里面通过slot来占位,然后页面使用组件这里直接写你自己的组件,注意是直接写,因为是单个插槽也不需要指定什么


多个插槽
如果要启用多个插槽,就需要配置一下,现在组件js配置options里面为multipleSlots为true

然后定义slot的时候需要指定name

使用的时候用 slot来指明name

1.8 父子组件通信
有三种方式:

属性绑定: 仅能设置json兼容数据也就是仅能传一些简单数据,不能传方法等
注意页面也可以当做父组件
在页面的data定义自己的数据

直接通过属性绑定给到子组件

子组件通过properties来接受

事件绑定
子组件给父组件传数据的时候
首先父组件要在js定义这个自定义函数

然后给到子组件,给的时候就通过bind语法加你的事件名,这里最好用第二种形式,可以跟原生事件做一个区别

子组件这边通过 this.triggerEvent里面是事件名,和你要带的参数(对象形式)

最后父组件这边通过 e.detail获取参数

获取组件实例
也是父给子传,类似于ref,需要给子组件设置 class或者id,通过 this.selectComponent来获取到子组件从而可以去修改他的一些data、properties或者调用它的一些方法

1.9 behaviors
behaviors就是mixin,组件中属性、数据、方法、生命周期函数等有共同的都可以通过behaviors来共享
每个组件可以引用多个behavior,behavior也可以引用其他behavior
创建:一般在根目录创建一个behavior文件夹,里面放一个js来专门存放behavior

导入并使用:

此时你的组件已经有这些属性、数据等了,直接用即可

behavior可以存放的属性有哪些:

当behavior与组件里面的一些属性、数据等同名时
有一些规则,还是比较多的,可以通过微信官方文档来看具体

二.使用npm包
虽然能使用npm包,但并不是所有包都能使用

依赖node(如:fs)、依赖浏览器内置对象(如:jQuery)、依赖c++
2.1 Vant Weapp
是有赞前端团队专门用于小程序的一套ui结构
首先安装,参考官网文档https://vant-contrib.gitee.io/vant-weapp/#/quickstart
在自己终端窗口打开,首先要先初始化

直接npm开始安装

接下来的两步查看官方文档配置


然后构建npm就完成安装了
使用
需要在app.json的usingComponents注册

2.2 使用css变量定制vant主题样式
首先css变量怎么用,类似于less变量,可以起到一个方便修改的作用
带有前缀--的属性名,比如--example--name,表示的是带有值的自定义属性,其可以通过 var 函数在全文档范围内复用的。

怎么来定制vant主题:
首先是需要在app.wxss里面修改page的样式
在小程序里面page就相当于html是整个页面的根节点
那么怎么来修改呢:
可以在官网文档找到

在这里面找到你要修改的那个组件的什么样式

将前面改成--

2.3 API promise化
小程序官方提供的很多api是基于回调来执行的,就比如发请求的request里面就有成功失败完成等回调,像这样回调一多了就容易产生一个问题,就是造成回调地狱的问题,代码的可读性、维护性差
要将官方api promise化需要用到一个包 miniprogram-api-promise

需要知道的是,我们微信小程序是不能直接识别这些npm包的,之所以能够使用完全是因为构建了npm包,所以这个时候一般下了一个包之后还需要构建一次npm


然后是使用需要在app.js里面顶级先注册调用
将wx上的方法都promise化给到了空对象wxp
中间一定要有个wx.p过渡,后面用也是用这个

怎么来用:
比如发起一个请求



所以现在就可以用async,await了

三.全局数据共享
类似于vuex实现各个组件间数据共享
需要两个包来实现:

下载

创建store
创建一个store文件夹专门来做仓库,里面导入observable,向外导出他,他就像new store一样,里面就可以放一些需要存放的数据
state

计算属性
直接在下面定义一个函数即可,依赖的数据产生变化,他也会跟着变

action
要修改store里面的数据也是需要action来修改的,需要先引入

然后直接在里面写action的函数,注意方法需要用action包起来

而且他会接受参数,也就是外部action传进来的参数

怎么来在page页面中来使用mobx中的数据或者actions

先引入上面这个方法和我们的store数据源
首先在我们onLoad钩子中用到这个方法来创建,第一个参数为this也就是这个页面的实例,第二个参数一个对象有我们的数据源,有我们的data、getters、还有actions里面的函数
创建之后就有了这个实例对象,就可以在onUnload钩子清理这些数据
绑定好之后,直接在页面中使用即可



注意我要修改numA的值,需要action接受参数,同时这边只能传进store里面去改

在组件中使用:

主要注意他有三种引入数据的方法,引入action前面是你自定义的名字,后面才是actions里面定义的函数名
四.分包
就是将一个完整的小程序划分为不同的子包,用户在使用时按需加载
如果不分包的话那就是所有页面以及资源融合在一起

分包后一般分为一个主包多个分包

注意:主包里面的公共资源所有人包可访问,但是分包里面的私有资源只有自己能访问,tabBar页面需要放在主包中
整个小程序分包大小不能超过16MB,单个分包不能超过2MB
4.1 使用分包
首先了解一下分包的树结构

就是和pages同级再来分包的文件夹,里面又放一些pages
但是还没完还要在app.json配置 subpackages

查看分包体积

4.2 独立分包
独立分包本质上也是分包,只是普通分包要进入必须依赖主包进入,而独立分包则不依赖主包,可以通过其他渠道直接进入小程序

创建时候独立分包和普通分包的区别就是,json文件有无 independent

注意独立分包和普通分包以及主包之间是相互隔离的,无法相互引用彼此资源,包括主分包公共资源
4.3 分包预下载
进入某个小程序时,由框架预下载可能需要的分包,从而提升进入分包的启动速度
预下载是进入一些指定的页面时触发

包名除了root还可以通过name指定
分包预下载限制:
分包预下载限额2MB

五.案例自定义tabBar
tabBar数字和我们的store数字保持同步

首先官方文档是有自定义tabBar教程的
https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html
首先需要开启自定义模式 custom改为true


注意原先定义的tabBar最好不删除
一个是保证低版本可以看到tabBar,一个是可以用来区分哪些是tabBar

创建文件夹

先实现一个基本的tabBar结构,这里我们用vant组件实现
先引用

将数据改成我们自己的数据,注意怎么换成我们自己的icon图标


然后说一下怎么来修改我们组件的一个样式
之前已经说过了,但那是直接在app.wxss里面改,而现在是在组件里面的wxss里面改,就需要一个新的配置项

这样才能修改成功

但是我们的info应该是人手一个


这个时候就要考虑怎么讲mobx的值给到我们的tabBar里面来了,这里的自定义tabBar实际上是组件,所以要用组建的引用方法


然后就是怎么将自定义的tabBar info值和我们的数据连动起来,这里要用到监听器

到目前为止还差最后一步,切换效果
通过 wx.switchTap这个api来实现跳转

但是这个时候icon又出现了问题,这个时候应该去store定义一个active作为索引值


修改选中项文本颜色
参考vant组件api
微信小程序day04基础加强的更多相关文章
- 微信小程序开发基础
前言: 微信小程序开入入门,如果你有html+css+javascript的基础,那么你就很快地上手掌握的.下面提供微信小程序官方地址:https://developers.weixin.qq.com ...
- 微信小程序高级基础
微信小程序高级基础 微信小程序的注册和服务器配置: 小程序是什么呢?小程序是一种不需要下载安装就可以使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下就可以打开应用, ...
- 微信小程序入门基础
微信小程序入门基础 视频教程(https://edu.csdn.net/course/detail/8456?pre_view=1) 第一章.认识小程序 1.工具的下载与安装 2.小程序代码构成 ...
- 微信小程序开发基础知识总结
微信小程序在无论在功能.文档及相关支持方面,都是优于前面几种微信账号类型,它提供了很多原生程序才有的接口,使得我们的小程序在很多方面突破H5页面应用的限制,更加接近原生程序的功能,因此微信小程序具有很 ...
- 微信小程序之基础入门
微信小程序有几个基础的文件:js(JavaScript逻辑代码),json(页面配置),wxml(类似hthml布局),wxss(css样式) 我们使用app.json文件来对微信小程序进行全局配置, ...
- 微信小程序 API 基础
其实还有一些组件,没有提,因为那些组件跟 API 的功能差不多,API 可能比他会更好一点: 具体可见官方文档 基础: 判断接口是否可用:wx.canIUse(a) a 代表:接口名字 返回值:布尔 ...
- .NET开发微信小程序(基础配置)
1.微信小程序的必备Model public class WxConfig { /// <summary> /// 小程序的appId /// 登录小程序可以直接看到 /// </s ...
- 微信小程序零基础制作指南
第一步 准备工作 下载腾讯官方的微信web开发工具并且安装 第二步 登录已经注册小程序的微信账号并且选择合适的路径新建小程序项目. 新建一个页面文件夹,每一个页面需要一个文件夹,里面包括写逻辑脚本的j ...
- 【微信小程序】基础组件--view text image
组件的通用属性: id class style hidden bind* catch* data-* view 小程序基础组件,基本等于最常用组件,类似于HTML中的div.view用于构建页面骨架, ...
- 微信小程序之基础简介
创建小程序项目后进入编辑环境中会有以下的初始配置文件: 文件夹: 1.pages(存放小程序的页面) 1.index 2.logs (页面里的js文件 以Page()方法开头 所有参数对象都存放在其里 ...
随机推荐
- 【进阶篇】基于 Redis 实现分布式锁的全过程
目录 前言 一.关于分布式锁 二.RedLock 红锁(不推荐) 三.基于 setIfAbsent() 方法 四.使用示例 4.1RedLock 使用 4.2setIfAbsent() 方法使用 五. ...
- easyExcel多行表头设定不同样式和特定单元格设定样式的实现
前言 有个需求,需要设置Excel导出的样式,样式如下图所示,有三个表头行,第一个表头行需要加粗和灰色背景,另外两个表头行使用另外的样式,并且当测试结果单元格出现x或者未通过的时候,设置其为红色字体. ...
- 02. rails安装
rails安装 ruby 1.8.6 对应的rails是2.3.2 Ruby 1.8.7 或 1.9.2 对应的rails 2.3.x ruby1.9.3,对应的rails是3.2.12, ruby2 ...
- LogAgen的工作流程
LogAgen的工作流程: 一.读日志 --tailf 第三方库 新建tail_test/main.go package main import ( "fmt" "git ...
- Docker推送镜像到Dockerhub
登录docker hub官网注册账号 https://hub.docker.com/signup 登录账户,创建一个仓库 "Create Repository"--> 输入命 ...
- WordPress对url做重定向处理
在一个网站进行改版滞后,可能会产生大量的错误的urls,我们想让这些urls还是存在的,并跳转到新的url,此时就要做301重定向. 针对wordpress做重定向,一般推荐使用redirection ...
- 『手撕Vue-CLI』添加帮助和版本号
前言 经过上一篇『手撕Vue-CLI』编码规范检查之后,手撕 Vue-CLI 已经进阶到了代码规范检查这一步,已经将基本的工程搭建好了,然后代码规范约束也已经加入了,并且将 nue-cli 指令绑定到 ...
- CMD程序_WordCount_博客改
程序简介 这个程序只能以命令行的方式启动,在启动时要输入相应的命令.程序的功能是对文本文件的字符数,单词数,行数进行统计,将结果输出到默认文件或指定文件. 码云项目链接:WordCount 程序结构 ...
- 国产Linux音视频聊天程序开发遇到的坑及解决:相互听不到对方声音?
最近完成了一个银河麒麟上的视频聊天项目,在我们开发机上测试一切正常后,提交给甲方测试.结果发现在甲方的某些银河麒麟V10的电脑上,听不到声音. 这个问题,使用<Avalonia 实现跨平台的IM ...
- 什么是Java线程池
摘自:某个百度知道 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在 ...