生命周期,组件,插槽
- 发请求语法
- window的一些配置
- tabbar如何配置-跟window平级
- 配置下拉刷新,全局就是写到
window
里
- 写到全局里代表所有页面都有下拉,但是下拉这个功能一般只是某些页面用,所以应该写到局部(某个页面对应的json文件),写法跟上面一样,但是不用写
window
- 如果下拉会触发一个钩子
- 如果想手动停止下拉调用
- 小程序默认可以上拉触底,但是要保证内容超过1屏,自动会触发,默认设置距离底部50触发,触发会调用一个钩子
- 也可以设置上拉触底的距离,全局就写到window里,局部就去掉window
- 导航到tabbar页面
- 导航到tabbar页面,不能通过网址传参
案例:本地生活-详情页与跳转
- 接口地址:https://applet-base-api-t.itheima.net/categories/:cate_id/shops
- 请求方式:GET
- 请求参数:
- _page 表示请求第几页的数据
- _limit 表示每页请求几条数据
详情页布局
- 每一个商家就是一个view,然后分为一左一右,左边图片,右边又是个view,右边的view里放四行view
点击跳转到详情页并携带id和查出数据
- 来到
home
给九宫格的每个盒子加点击事件,需要携带当前的数据
- 回到
list
页面,在onLoad里拿到参数,并存起来,但是存的id不用渲染,可以声明成纯数据字段。然后再准备一个发请求的代码,调用拿到数据存起来
- 去渲染到页面
完成上拉加载更多页
- 如果要加载更多页,就意味着发请求时,页码不能写死
1
,如果写死1
,永远只能加载第一页,所以用一个变量来记录和控制,而这个变量不需要渲染,所以可以声明成纯数据字段
- 发请求时使用
_page
作为页码,并且在请求成功后要让页码+1
- 监听下拉触底,在下拉触底里调用发请求的方法
- 优化提示,发请求前弹出加载中,请求完成就关掉弹出的提示
完成节流阀
- 先声明个变量记录当前有没在加载数据
- 发请求之前把节流阀改为true,代表当前正在加载,等请求结束,把节流阀改为false,代表可以新的请求
- 在下拉触底里要判断,如果为true,代表当前还有个请求没完成正在加载,所以就直接return
完成下拉刷新
- 因为下拉只要
list
页面有下拉,所以来到list.json
开启下拉,并设置样式
- 然后监听下拉事件,因为下拉要刷新重新加载最新数据,所以需要在下拉里把页码改成1,并把数组清空再重新调用发请求的方法
- 最后再请求完成的回调里手动停止下拉的动画
wxs介绍 - 为什么需要用wxs
- 小程序里无法在结构中
wxml
中调用js
里声明的函数 - 但是很多时候,我们确实有需要调用函数的需求,所以为了解决这种你需要在
wxml
中调用函数的场景,微信提供了一种脚本叫wxs
- 什么叫
wxs
?- 微信script
- 它相当于是一门微信创造的独立的脚本语言(js也是一种脚本语言)
- 它专门用来上面的需求:封装一函数,这些函数可以在
wxml
中直接调用 - 特点:
- 跟js的语法非常相似(方便前端开发者可以快速上手),甚至可以说语法一模一样
- 最大的区别在于:wxs不能用es6的那些新语法
wxs的内嵌写法
- 内嵌写法是指写到
wxml
里面 - 语法是
- 例
- 用法
wxs的外联写法
- 先准备一个独立的
wxs
文件,在里面写代码,例 - 创建了一个文件叫
tool.wxs
,代码如下
- 在需要用的地方,做导入
- 用法
wxs和js语法的不同点
- 大部分基础语法是一样的
- 核心是:es6的语法在wxs通通不能用
- 例如:let、const、模板字符串、简写等等都不能用
- wxs里的正则写法跟js的不一样,wxs的正则如下编写
使用wxs处理电话号码
- 因为wxs也建议最好用外联写法, 所以来到
项目根目录
新建utils
文件夹,里面新建phone.wxs
文件,在里面封装一个处理手机号格式的函数,并暴露出去
- 然后来到
list
页面,导入这个wxs并使用到手机号那一个view上
- 知识点:
- wxs里要写正则,不能用js的写法, 要用
getRegExp('正则规则')
这种写法
- wxs里要写正则,不能用js的写法, 要用
生命周期介绍
- 生命周期:指的是从创建到销毁经历的一系列阶段
- 小程序里生命周期有三大类:
- 应用的生命周期
- 页面的生命周期
- 组件的生命周期
应用的生命周期函数
- 提示:
- 可以写一个
App
按回车,自动生成,而且还带注释,清晰的告诉你什么阶段调用的 - onLaunch
- 应用打开时并初始化完成调用,这里可以做一些初始化的工作,例如读取出之前保存的数据
- onShow
- 第一次显示时调用,或者从后台重新进入到前台调用
- onHide
- 从前台进入到后台时调用(前台到后台指的是切出去了)
- onError
- 发生错误调用
- 可以写一个
页面的生命周期函数
- onLoad
- 页面一加载就调用,可以做一些初始化数据的操作,例如去请求数据
- onReady
- 当页面内容渲染调用
- onShow
- 当页面显示调用
- 应用场景:因为tabbar页面默认情况下是切走没有销毁,所以如果从别的页面切回来又传递了参数,就不能在onLoad里接收参数了,只能在onShow里
- onHide
- 当页面隐藏调用
- onUnload
- 当页面卸载调用
- tabbar页面相当于有缓存,也就是切走了也没有销毁。但是非tabbar页面,切走了就销毁了
- 总结:
- 非tabbar页面,放心的在onLoad里接收参数,因为他们默认情况下,重新打开绝对都是重新加载新的
- tabbar页面,要接参数最好用onShow,而且它无法直接传参
组件 - 创建与使用
- 界面上的一个部分就是组件
- 因为相当于组成网页的一部分,所以就叫组件
- 小程序里页面就是页面,组件就是组件
- 组件如何创建?
- 一般情况下要放在
components
文件夹,然后里面每个组件都是一个独立的文件夹(以组件名起名),然后对着文件夹右键
选择新建component
即可创建 - 组件默认也有
json
、wxml
、wxss
、js
四部分,可以写自己的结构和样式以及逻辑代码
- 一般情况下要放在
- 组件如何使用?
- 局部使用
- 哪个页面要用,就在哪个页面自己的
json
文件里写如下配置
- 哪个页面要用,就在哪个页面自己的
- 局部使用
组件与页面的区别
- 使用场景的区别:
- 组件一般指页面中的一部分
- 页面是一块大的页面
- 代码写法不同
- 页面是由
Page
函数创建,组件是由Component
函数创建 - 页面的函数直接写到
data
平级的位置,组件的函数写到methods
里面,methods
跟data
平级 - 页面的
json
文件里没有"component":true
,组件里有
- 页面是由
组件样式 - 样式隔离
- 组件不受外界写的样式影响,以及组件内部写的样式默认也不会影响到外部
- 如果选择器用的是标签选择器(不受这个影响,它会导致样式变成全局样式,官方不推荐用标签选择器)
- 有没有一种可能?我在父组件(页面)里想影响到子组件的样式
- 可以修改
- 针对的是class选择器,官方也是推荐用class选择器,避免用标签选择器
组件内的data和properties的区别.mp4
- 组件内的数据定义在
data
里 - 方法定义在
methods
- 组件内还有个地方叫
properties
,也是定义的属性的地方,但是这里的数据一般是由父组件传递过来的数据 - 本质上
data
和properties
没有任何区别,它们是同一个东西
- 如果要修改也是都可以用
this.setData
来修改 - 但是,如果一个数据需要外界传进来还是得写在
properties
,如果一个数据是内部产生,建议就写在data
里 - properties语法
组件通信 -父子传值
- 父传子
- 子里要声明接收哪些数据
- 子传父
- 通过自定义的
事件
来传递,相当于是vue里的this.$emit- 子里做传递
- 通过自定义的
- 父里直接找到子组件对象,就可以访问子组件里的数据和方法
- 类似于vue里的ref加标记,再用$refs来操作
- 首先需要给组件加个选择器,一般建议用类选择器,id也可以
- 再通过
数据监听器
- 监听数据改变,类似于Vue里的
watch
- 语法:几乎跟watch是一样的,只不过把
watch
改成observers
- 特点:可以同时监听多个数据
组件的生命周期
生命周期 | 参数 | 描述 | 最低版本 |
---|---|---|---|
created | 无 | 在组件实例刚刚被创建时执行 | 1.6.3 |
attached | 无 | 在组件实例进入页面节点树时执行 | 1.6.3 |
ready | 无 | 在组件在视图层布局完成后执行 | 1.6.3 |
moved | 无 | 在组件实例被移动到节点树另一个位置时执行 | 1.6.3 |
detached | 无 | 在组件实例被从页面节点树移除时执行 | 1.6.3 |
error | Object Error |
每当组件方法抛出错误时执行 | 2.4.1 |
__EOF__

本文作者:Sternstunde
本文链接:https://www.cnblogs.com/strundent/p/17078295.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/strundent/p/17078295.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)