微信小程序——3、逻辑js文件
逻辑层js文件
微信小程序前端进行了层次划分,分为逻辑层和视图层。逻辑层实现对数据的加工和处理。与HTML页面相似,逻辑层使用JavaScript编写。逻辑层将数据处理后发送至视图层,同时接受视图层的反馈,官方在JavaScript的基础上进行了一些封装和修改,主要有以下:
- 提供了App和Page方法,用来进行程序和页面的注册。
- 提供了丰富的API,如扫一扫、支付等微信功能。
- 每个页面有独立的作用域,并提供模块化能力。
- 由于框架并非运行在浏览器中,所以JavaScript在Web中的一些能力无法使用。
- 开发者所写的所有代码都将打包成一份JavaScript,并在小程序启动的时候运行直至销毁。
用APP函数注册小程序
每个微信小程序必须在app.js中进行程序注册并且只能注册一次。因此,主逻辑文件需要包含注册方法
注册微信小程序直接使用APP()函数即可,在这个对象可指定小程序的生命周期函数。可定义以下三个生命周期函数
- onLaunch:当小程序初始化完成时,会触发onLaunch,全局只触发一次。
- onShow:当小程序启动或从后台进入前台显示,会触发onShow。
- onHide:当小程序从前台进入后台,会触发onHide。
使用Page函数注册页面
微信小程序中每个页面需要使用Page()函数进行注册,与App()函数类似,Page()函数也需要一个JSON对象作为参数,其中可以定义页面的周期函数,还可编写自定义的函数来响应页面事件。更为重要的是,在参数中有一个名为data的属性,用来定义页面所需的数据。
//index.js
//获取应用实例
const app = getApp() Page({
data: {
motto: 'Hello World',
userInfo: {},
hasUserInfo: false,
canIUse: wx.canIUse('button.open-type.getUserInfo')
},
//事件处理函数
bindViewTap: function() {
wx.navigateTo({
url: '../logs/logs'
})
},
onLoad: function () {
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else if (this.data.canIUse){
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => {
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
}
},
getUserInfo: function(e) {
console.log(e)
app.globalData.userInfo = e.detail.userInfo
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
}
})
初始化数据
初始化数据位于data中,初始化数据将作为页面的第一次渲染。data将以JSON的形式由逻辑层转换到视图层,所以其数据必须是可以转换成JSON的格式,如字符串、布尔值、对象、数组等。
上述代码中定义了一个名为moto的属性,是一个字符串值。还有一个名为use Info的空对象。
视图曾可以通过wxml对数据进行绑定。
生命周期函数
在Page()函数的参数中可定义当前页面的生命周期函数。页面的生命周期函数有以下几个
- onLoad:页面加载完调用此函数,只会使用一次。以获取wx.navigateTo和wx.redirectTo及中的query
- onShow:页面显示时调用此函数
- onReady:页面初次渲染调用该函数,只会调用一次,代表页面准备完成,可以和视图层进行交互
- onHide:页面隐藏时调用函数
- onPullDownRefresh:下拉刷新调用函数,需要在config的window项中开启enablePullDownRefresh
事件处理函数
在视图层添加事件绑定,当触发事件时会执行page中定义的事件处理函数
例如:
<view bindtap="viewTap">单机测试</view>
这是在wxml中定义的时间bindtab,值为viewTap表示一个事件处理函数的名称,在Page中需要定义如下:
Page({
viewTap:function(){
console.log('view tap')
}
})
这里的viewTap和上面wxml文件中viewTap的事件处理函数名称相同,这样用户在页面单击文字就会调用Page中的view Tab函数
使用setData修改初始化数据
为了更新数据,官方在Page对象中封装了一个名为SetData()的函数,使用这个函数可以更新data中的数据。该函数接受一个对象,以key,value的形式表示将this.data中的key对应的值改变为value。其中key可以非常灵活,以路径的形式给出。
onLoad:function(){
//更新数据
this.setData({
userInfo:userInfo
})
}
上面这个程序使用this.setData函数更新了userInfo对象的数据
微信小程序——3、逻辑js文件的更多相关文章
- 微信小程序-01-项目组成文件介绍(入门篇)
自古开篇先说两句,写这些笔记不是学习用的,主要是后续分享一些遇到的坑,碰到过什么样的问题,怎么去解决,如果你不是一个很耐心无看文章的人,建议去 网易云课堂找一些课程,跟着别人的脚步或许会更有动力,我的 ...
- 从微信小程序到鸿蒙js开发【12】——storage缓存&自动登录
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 正文: 在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验.比如在一个电商的app中,如果希望用户登录成功后,下次打 ...
- 从微信小程序到鸿蒙js开发【13】——list加载更多&回到顶部
鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 目录: 1.list加载更多 2.list回到顶部 3.<从微信小程序到鸿蒙js开发>系列文章合集 1.list加 ...
- 从微信小程序到鸿蒙js开发【15】——JS调用Java
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录:1.新建一个Service Ability2.完善代码逻辑3.JS端远程调用4.<从微信小 ...
- 微信小程序结合原生JS实现电商模板(二)
接 <微信小程序结合原生JS实现电商模板(一)>,在首页列表加入购物车到购物和模块增删数量,动态计算商品价格实现后,本次提交主要实现了商品详情(还不完善)简单页面,从商品详情页跳转到购物车 ...
- 微信小程序引入md5.js
今天给大家安利一下微信小程序引入md5.js的方法,不多说 md5.js在下面 直接复制到项目的utils/md5.js即可 /* * A JavaScript implementation of t ...
- 从微信小程序到鸿蒙js开发【11】——页面路由
目录: 1.router.push()&wx.navigateTo() 2.router.replace()&wx.redirectTo() 3.router.back()&w ...
- 微信小程序--代码构成---JS 交互逻辑
一个服务仅仅只有界面展示是不够的,还需要和用户做交互:响应用户的点击.获取用户的位置等等.在小程序里边,我们就通过编写 JS 脚本文件来处理用户的操作. <view>{{ msg }}&l ...
- 微信小程序开发---逻辑层(App Service)
再说逻辑层之前,先说说微信小程序框架(MINA) 小程序开发框架的目标是通过尽可能简单.高效的方式让开发者可以在微信中开发具有原生APP体验的服务. 框架提供了自己的视图层描述语言WXML和WXSS, ...
- 微信小程序 引用其他js里的方法
微信小程序中,在微信官方开发文档我们可以知道 小程序的目录结构 . 一个小程序页面由四个文件组成,一个小程序页面的四个文件具有相同路径与文件名,由此我们可知一个小程序页面对应着一个跟页面同名的js文件 ...
随机推荐
- Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
上一篇文章单独介绍了Ribbon框架的使用,及其如何实现客户端对服务访问的负载均衡,但只是单独从Ribbon框架实现,没有涉及spring cloud.本文着力介绍Ribbon的负载均衡机制,下一篇文 ...
- ZJU-1003 Crashing Balloon dfs,
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3 题意(难以描述):A,B两个人从1~100选数乘起来比谁的大(不能选重复的或者 ...
- element 表格元素 超链接
1.在循环体中的事件绑定 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- C# 枚举 小总结
枚举 枚举类型声明为一组相关的符号常数定义了一个类型名称. 枚举类型为定义一组可以赋给变量的命名整数常量提供了一种有效的方法.例如:假设你必须定义一个变量,该变量的值表示一周中的一天.该变量只能存储七 ...
- 关于LeNet-5卷积神经网络 S2层与C3层连接的参数计算的思考???
https://blog.csdn.net/saw009/article/details/80590245 关于LeNet-5卷积神经网络 S2层与C3层连接的参数计算的思考??? 首先图1是LeNe ...
- 洛谷P2801 教主的魔法 分块
正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...
- XMind思维导图自定义图标/图片
- [wx]自然数学规律
有趣的数学规律 椭圆 双曲线 抛物线都叫圆锥曲线 它们跟圆锥有着怎样的关系? 他们都是圆锥与平面在不同姿势下交配的产物. 参考 椭圆 抛物线 小结 e: 离线率 P: 任意一点 F: 焦点 准线: 一 ...
- 使用Python2.7 POST 数据到 onenet 平台
功能 发送数据名称为SENSORID(这里用TEST测试),数值为VALUE(这里用49值做测试)的数据,发送到自己的onenet对应设备 效果发送成功 代码 # -*- coding: utf-8 ...
- Chapter 7 Integrity(完整性), Views(视图), Security(安全性), and Catalogs(目录)
from Database Design to Physical Form CREATE TABLE integrity constraints (完整性约束) CREATE VIEW Securit ...