草庐IT

微信小程序(逻辑层的全部知识点)保姆级讲解

lqj_本人 2023-11-08 原文

1.什么是逻辑层

小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发者 JavaScript 代码的运行环境以及微信小程序的特有功能。

逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。

开发者写的所有代码最终将会打包成一份 JavaScript 文件,并在小程序启动的时候运行,直到小程序销毁。这一行为类似 ServiceWorker,所以逻辑层也称之为 App Service。

在 JavaScript 的基础上,我们增加了一些功能,以方便小程序的开发:

  • 增加 App 和 Page 方法,进行程序注册页面注册
  • 增加 getApp 和 getCurrentPages 方法,分别用来获取 App 实例和当前页面栈。
  • 提供丰富的 API,如微信用户数据,扫一扫,支付等微信特有能力。
  • 提供模块化能力,每个页面有独立的作用域

 2.页面数据

1.页面数据的定义:

页面js文件page哈桑农户中第一个项为data属性,在data中定义本页面逻辑处理需要用到的数据,其中很大一部分数据将用于wxml文件的数据渲染。因为小程序js文件时基于JavaScript编写的,所以在js文件中可以定义字符串,数字,布尔值,对象和数组等类型的数据。

2.setDate()的使用:

wxml:

<view style="font-size: 50rpx;margin: 50rpx 0 0 0;">{{lqj1}}</view>
  <view style="font-size: 50rpx;">{{lqj2}}</view>
<button style="background-color: aqua;" bindtap="changeDate2">点击我切换成模拟男友语气</button>

js:

data: {
    scrollTop: '', //滑动置顶
    lqj1:'你好!',
    lqj2:'小胖子'
  },
  changeDate2:function(){
    this.setData({
      lqj1:'你好坏!我好喜欢你呀!',
      lqj2:'小胖宝儿~'
    })
  },

效果展示: 

3.onPullDownRefresh()监听用户下拉事件:

wxml:

<!-- 第二个知识点开始(onPullDownRefresh()监听用户下拉事件) -->
<text style="margin: 100rpx 0 0 0;font-size: 40rpx;">2.onPullDownRefresh()此函数(监听用户下拉动作,需要在app.json或本文件夹下的json文件中配置)配置代码如下:</text>
<text style="font-size: 40rpx;color: red;">"enablePullDownRefresh": true</text>
<text style="margin: 50rpx 25% 0 25%;color: rgb(255, 0, 191);">配置好请下拉整个页面(将会改变文字)</text>
<!-- 第二个知识点结束 -->

js:

  onPullDownRefresh() {
    this.setData({
      lqj1:'小胖,不许无理取闹!',
      lqj2:'再惹我,我把你填在我家户口本上'
    })
  },

效果展示:

 3.onReachBottom()监听用户上拉触底事件:

wxml:

<!-- 第三个知识点开始(onReachBottom()监听用户上拉触底事件) -->
<text style="margin: 100rpx 0 0 0;font-size: 40rpx;">3.onReachBottom()此函数(监听用户下拉动作,需要在app.json或本文件夹下的json文件中配置)配置代码如下:</text>
<text style="font-size: 40rpx;color: red;margin: 50rpx 0 0 0;">"onReachBottomDistance":50(上拉触底的单位,默认为px)</text>
<text style="margin: 50rpx 25% 0 25%;color: rgb(255, 0, 191);">配置好请上拉整个页面(将会改变文字)注意:\n1.如果页面显示已经在最下面时再上拉是无效的\n2.如果页面的高度小于显示页面的高度(显示的内容小于等于页面的高度,上拉时无效)</text>
<!-- 第三个知识点结束 -->

js:

 onReachBottom() {
    this.setData({
      lqj1:'小胖子!到底啦!',
      lqj2:'我已经1米9了,别再拉长我啦!'
    })
  },

效果展示:

 4.onPageScroll(lqj)此函数(监听用户滑动页面事件,显示效果见演示区下方导航栏):

wxml:

<!--第四个知识点开始(onPageScroll(lqj)监听用户滑动页面事件)  -->
    <!-- 悬浮导航 -->
    <view class="{{scrollTop>100 ? 'fixedTab fixed' : 'fixedTab'}}">
    <!-- 上面运用三目运算实现一个class类的挑选 -->
     <view class="fixedTabItem on">001班课代表</view>
     <view class="fixedTabItem on">炒鸡帅!</view>
    </view>
    <!-- 悬浮导航 -->


<!--第四个知识点结束  -->

js:

data: {
    scrollTop: '', //滑动置顶
    },

onPageScroll(lqj) {
    let a = this;
    // console.log(t.scrollTop)
    a.setData({
    scrollTop:lqj.scrollTop
    // scrollTop是微信小程序规定的唯一的onPageScroll()属性,并且要定义一个参数例:(lqj),用lqj.scrollTop来让scrollTop:识别!
    })
   },

效果展示:(导航吸附状态)

 5.onShareAppMessage(lqj1)用户点击分享事件:

wxml:

<button data-name="shareBtn" open-type="share"
style="background-color: rgb(255, 115, 0);width: 400rpx;">转发</button>

js:

  onShareAppMessage(lqj1) {
    if(lqj1.from == 'button'){
      console.log(lqj1.target)
    }
    return{
      title:'小程序开发001班课代表超级大帅B!',//转发的标题(默认是小程序的标题,自定义)
      path:'../index/index.js'//转发的路径(转发到别人的微信,别人打开后的首页)
    }
  },

效果展示:

 6.onResize(res)屏幕旋转事件

wxml:

<!-- 第六个知识点开始onResize(res)屏幕旋转事件 -->
<text style="margin: 100rpx 0 0 0;font-size: 40rpx;">6.onResize(res)屏幕旋转事件
具体代码如下:(对于这个api我要说腾讯**,这个api只支持ios系统)</text>
<text style="font-size: 40rpx;color: red;margin: 50rpx 0 0 0;">在json中配置:"pageOrientation": "auto"</text>
<text style="margin: 50rpx 25% 0 25%;color: rgb(255, 0, 191);">
  以下代码是判断页面内如果有转发button时,返回值里卖弄有title与path(下方有注释):
  js代码:
  onResize(res) {
    res.size.windowWidth // 新的显示区域宽度
    res.size.windowHeight // 新的显示区域高度
  }

    </text>
<!-- 第六个知识点结束 -->

 js:

  //  ios系统手机旋转时程序跟着转
   onResize(res) {
    res.size.windowWidth // 新的显示区域宽度
    res.size.windowHeight // 新的显示区域高度
  },

效果展示:

  3.跳转页面+跳转传参

1.跳转(wx.navigateTo)无法跳转到tabbar(下面的one,two等带图标的页面)页面,返回时返回到上一个页面:

wxml:

<view style="margin: 30rpx 25% 0 25%;background-color: darkorange;" bindtap="tiaozhuan1">点我跳转到跳转1页面</view>

js:

 tiaozhuan1:function(){
    wx.navigateTo({
      url: '../tiaozhuan1/tiaozhuan1',
    })
  },

效果展示:

 2.跳转(wx.redirectTo)无法跳转到tabbar(下面的one,two等带图标的页面)页面,返回时无法返回上一个页面,直接返回到首页(one):

wxml:

<view style="margin: 30rpx 25% 0 25%;background-color: darkorange;" bindtap="tiaozhuan2">点我跳转到跳转2页面</view>

js:

  tiaozhuan2:function(){
    wx.redirectTo({
      url: '../tiaozhuan2/tiaozhuan2',
    })
  },

效果展示:

 3.跳转(wx.redirectTo)可以跳转到tabbar(下面的one,two等带图标的页面)页面,返回时无法返回上一个页面,直接返回到首页(one):

wxml:

<view style="margin: 30rpx 25% 0 25%;background-color: darkorange;" bindtap="tiaozhuan3">点我跳转到跳转tabbar(one)页面</view>

js:

  tiaozhuan3:function(){
    wx.redirectTo({
      url: '../index/index',
    })
  },

效果展示:(只能在模拟器上显示该效果)

 4.以(wx.navigateTo)为例,做跳转传参的演示:

跳转前的wxml:

<view style="margin: 30rpx 25% 0 25%;background-color: darkorange;" bindtap="tiaozhuan4">点我跳转到跳转3页面并把“001班课代表最帅”传到页面1</view>

跳转前的js:

  tiaozhuan4:function(){
    wx.navigateTo({
      url: '../tiaozhuan3/tiaozhuan3?id=001班课代表最帅',
    })
  },

跳转后的wxml:

<view style="font-size: 50rpx;margin: 0 20% 0 20%;">小胖子说:</view>
<view style="font-size: 50rpx;margin: 0 20% 0 20%;color: deeppink;">{{tiaozhuan3Date}}!!!</view>

跳转后的js:

 data: {
    tiaozhuan3Date:null
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    let tiaozhuan3Date = options.id;
    console.log(options);
    this.setData({
      tiaozhuan3Date:tiaozhuan3Date
    })
  },

效果展示:

  4.现在来讲讲全局及局部变量

本页wxml:

<text style="font-size: 50rpx;margin: 50rpx 10% 0 10%;color: pink;">{{lqj}}</text>

本页js:

var app = getApp()
var lqj = app.quanjuDate.lqj

pqge({
      data: {
    lqj:lqj,
  },
})

app.js:

App({
  quanjuDate:{
    lqj:"你可能不是我见过最漂亮的女孩,但却是我心中最美丽的存在!"
  },
})

效果展示:

  5.现在来讲讲代码模块化

1.首先我们创建一个外部公共js来供给所有的子js调用,和app.js类似,担忧不同!

我在这里创建了一个名为:gonggong.js的外部公共js文件

gongong.js:

function sayHello(name){
  console.log("我想你了,"+name+"!")
}
module.exports.sayHello = sayHello

 我是用three.js去调用它

three.js:

var common = require("../../gonggong.js")
Page({
  Helloxiaopang:function(){
    common.sayHello("小胖")
  },
})

three.wxml:

<button style="background-color: aqua;" bindtap="Helloxiaopang">点击我打印“我想你了,小胖”</button>

效果展示:

 5.现在来讲讲页面自定义事件函数

1.bindtap=""绑定点击事件(这个很简单了哈,前面用的点击都是)

2.事件绑定和冒泡

举例说明两种绑定属性(bindtap,catchtap)

·bindtap为冒泡事件,所以点击子节点时父节点跟着执行(并且先执行)

·catchtap为阻止冒泡事件,所以点击子节点时父节点不会跟着执行

例子:

wxml:

<view style="background-color: aqua;width: 500rpx;height: 500rpx;" bindtap="box1">
  外层选择器A
  <view style="background-color: rgb(109, 209, 16);width: 300rpx;height: 300rpx;" catchtap="box2">
  中层选择器B
    <view style="background-color: rgb(247, 152, 10);width: 150rpx;height: 150rpx;" catchtap="box3">内层选择器C</view>
  </view>
</view>

js:

box1:function(){
    wx.showToast({
      title: '外层选择器A',
    })
  },
  box2:function(){
    wx.showToast({
      title: '中层选择器B',
    })
  },
  box3:function(){
    wx.showToast({
      title: '内层选择器C',
    })
  },

效果展示:

 3.事件对象

1.type:表示事件的类型(这个只能在手机预览时看得见区别,手机输入时type绑定的值不一样,手机弹出的输入器也是不同的):

text:(文本)

number:数字键盘(无小数点)

idcard:数字键盘(无小数点、有个 X 键)

digit:数字键盘(有小数点)

举例说明:

wxml:

  <input type="number" style="width: 660rpx;height: 70rpx;border: 2rpx gray solid;"bindblur='dianjiinput1'placeholder="请输入bumber型"/>
  <input type="digit" style="width: 660rpx;height: 70rpx;border: 2rpx gray solid;"bindblur='dianjiinput2'placeholder="请输入digit型"/>
  <input type="idcard" style="width: 660rpx;height: 70rpx;border: 2rpx gray solid;"bindblur='dianjiinput3'placeholder="请输入idcard型"/>
  <input type="text" style="width: 660rpx;height: 70rpx;border: 2rpx gray solid;"bindblur='dianjiinput4'placeholder="请输text入型"/>

js:

  dianjiinput1:function(e){
    console.log(typeof(e.detail.value))
    console.log(e)
  },
  dianjiinput2:function(e){
    console.log(typeof(e.detail.value))
  },
  dianjiinput3:function(e){
    console.log(typeof(e.detail.value))
  },
  dianjiinput4:function(e){
    console.log(typeof(e.detail.value))
  },

效果展示:(type类型的不同点击input输入框时开启的输入器也不同)

 2.timeStamp:页面打开到触发事件多经过的毫秒数(时间戳)

3.target:触发事件的源组件

4.currentTarget:事件绑定的当前组件

5.detail:自定义事件所携带的数据,如表带组件的提交事件会携带用户的输入,媒体的错误时间会携带错误信息(说人话就是:detail里面村的是你输入或data或setdata里面的数据,如果你有地方写错了,他会报错!)

6.touches:是一个数组,每个元素为一个Touch对象,表示当前停留在屏幕上的触摸点

7.changedTouches:数据格式同touches,表示有变化的触摸点,如无变化则与target和currentTarget属性包含的参数相同

8.dataset:在组件节点中可以附加一些自定义的数据,用于逻辑处理

 

有关微信小程序(逻辑层的全部知识点)保姆级讲解的更多相关文章

  1. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  2. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  3. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  4. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  5. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  6. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  7. Ubuntu20.04系统WineHQ7.0安装微信 - 2

    提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信

  8. Linux磁盘分区中物理卷(PV)、卷组(VG)、逻辑卷(LV)创建和(LVM)管理 - 2

    文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分

  9. 微信小程序订餐系统 - 2

    对传统的餐饮商家来说,小程序很好地解决了餐厅线下线上连接的问题,在引流获客、节约人力、营销宣传、塑造会员体系、改善消费体验等方面都有很大帮助。小程序点餐可以帮助餐饮企业节省一大把人力开支。一个包含扫码点单、菜品管理、优惠券推送、外卖配送的小程序,商家花几万元就能完成开发测试并投入。商家为什么要开通“扫码点餐”1.解决服务员不够用的问题。2.不怕顾客跑单漏单。3.在微信就能管理菜品、查看营业额。4.订单小票显示顾客桌号和已点菜品。5.可在“附近的小程序”找到您的门店。如今餐饮业常用的三种经营模式:1堂食点单模式客人通过小程序堂食点单。商家可以在微信扫码点餐小程序管理后台根据自己店内情况来设置不同

  10. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

随机推荐