应用程序开发公司
软件开发

针对您的项目需求及预算规划量身制定方案

个体/中小企业/集团/政府机构/行业组织 了解详情 了解详情

微信小程序试用报告:前端源码逻辑和工作流

发布时间:2024-01-01 00:00 浏览次数:88

先看看入口app.js,app(obj)登记注册一个小程序。拒绝接受一个 object 参数,其选定小程序的生命周期函数等。其他文件可以通过全局方法getApp()以获取app实例,进而轻易调用它的属性或方法,比如(getApp().globalData)


//app.js


App({


onLaunch: function () {


//调用API从本地内存中获取数据


var logs = wx.getStorageSync('logs') || []


logs.unshift(Date.now())


wx.setStorageSync('logs', logs)


},


getUserInfo:function(cb){


var that = this


if(this.globalData.userInfo){


typeof cb == "function" && cb(this.globalData.userInfo)


}else{


//调用登入USB


wx.login({


success: function () {


wx.getUserInfo({


success: function (res) {


that.globalData.userInfo = res.userInfo


typeof cb == "function" && cb(that.globalData.userInfo)


}


})


}


})


}


},


globalData:{


userInfo:null


}


})


我认知app.js为入口初始化文件,也就是提供更多全局API开拓的地方。下边分析下自带的几个方法和属性


onLaunch钩子函数可以在小程序初始化顺利完成后可以自动继续执行一次,然后在小程序生命周期里如果你不主动调用onLaunch,它就不能在继续执行。


var logs = wx.getStorageSync('logs') || []以获取本地内存中的logs属性,如果值空,那么设置logs=[] 与HTML5中的localStorage促进作用相近


logs.unshift(Date.now()) 当前登入时间嵌入至数组中


wx.setStorageSync('logs', logs) 将数据取走本地内存,因为wx为全局对象,所以可以在其他文件中轻易调用wx.getStorageSync('logs')以获取本地缓存数据


getUserInfo函数,顾名思义就是以获取登入用户信息,相等于此函数提供更多了以获取用户信息的USB,其他页面不调用自然不能继续执行。其他页面通过getApp().getUserInfo(function(userinfo){console.log(userinfo);})这种方式调用该方法,以获取用户信息。


getUserInfo:function(cb){//参数为cb,类型为函数


var that = this


if(this.globalData.userInfo){//用户信息不为空


typeof cb == "function" && cb(this.globalData.userInfo)//如果参数cb的类型为函数,那么继续执行cb,以获取用户信息;


}else{//如果用户信息为空,也就是说第一次调用getUserInfo,可以调用用户登入USB。


wx.login({


success: function () {


wx.getUserInfo({


success: function (res) {


console.log(res)


that.globalData.userInfo = res.userInfo//把用户信息参数值globalData,如果再次调用getUserInfo函数的时候,不须要调用登入USB


typeof cb == "function" && cb(that.globalData.userInfo)//如果参数cb类型为函数,继续执行cb,以获取用户信息


}


})


}


})


}


}


globalData对象用以存储全局数据,在其他地方调用


然后详细分析之下app.json文件,该文件促进作用就是对微信小程序展开全局布局,同意页面文件的路径、窗口整体表现、设置网络超时时间、设置多 tab 等、


最重要的就是pages属性,m6,为数组,数组内的元素为字符串性文件路径,选定小程序由哪些页面共同组成,第一项必须就是小程序起始页面。


{


"pages":[


"pages/index/index",


"pages/logs/logs"


],


"window":{


"backgroundTextStyle":"light",


"navigationBarBackgroundColor": "#fff",


"navigationBarTitleText": "WeChat",


"navigationBarTextStyle":"black"


}


}


然后来看下项目index和logs文件夹。微信小程序起始项目把每个页面有关的js、wxss、wxml放到各自的文件,这样看上去结构准确明朗很多。


先来看index文件夹,即为小程序起始页面。index文件夹下有index.js、index.wxml、index.wxss三个大文件。小程序把js、css、html代码拆分开去,放到独自的文件里,各司其职。js和样式表文件名必须与当前文件夹的wxml文件名保持一致,这样就可以确保js和样式表的效果能在页面中显现出来。我很观赏这样的设计理念,整齐划一,职责明晰,减低代码设计复杂度。


index.wxml,这就是常用的模板文件,数据驱动,存有过前端mvc、mvvm项目研发的对这个一定不能陌生,毕竟这就是基于react研发的。



//视图容器


//bindtap为容器存取页面鼠标事件,在鼠标返回时引爆bindViewTap事件处理函数,bindViewTap通过index.js page()设置嵌入


//大双括号的变量源自于index.js的data对象解析成对应的值,而且就是实时的


{{userInfo.nickName}}




{{motto}}




index.js,与reaact用法几无二异,换汤不换药。page()去登记注册一个页面。拒绝接受一个 OBJECT 参数,其选定页面的起始数据、生命周期函数、事件处理函数等。


var app = getApp() // 以获取入口文件app的应用领域实例


Page({


data: {


motto: 'Hello World',


userInfo: {}


},


//自定义事件处理函数,页面.userinfo的难引爆此函数


bindViewTap: function() {


wx.navigateTo({//全局对象wx的重定向页面方法


url: '../logs/logs'


})


},


onLoad: function () {//出现页面读取时,自动引爆该生命周期函数


console.log('onLoad')


var that = this


//调用应用领域实例的方法以获取全局数据


app.getUserInfo(function(userInfo){


//更新数据,页面自动图形


that.setData({


userInfo:userInfo


})


})


}


})


index.wxss文件只图形当前所属页面,可以全面覆盖全局app.wxss同一样式。


再分析之下logs日志文件夹,logs文件夹下有logs.wxml、logs.js、logs.wxss、logs.json,同理确保同名,就可以顺利完成效果图形。


logs.wxml文件




//block容器促进作用,并无其他实际含义。wx:for促进作用:结点logs数组,结点多少次,block块就可以激活多少次,for-item等同于为
结点元素起至一个局部变量,便利提及。


{{index + 1}}. {{log}}




logs.js 文件


//logs.js


var util = require('../../utils/util.js') //util.js相等于一个函数库,我们可以在这个文件内自定义拓展和PCB一些常用的函数和方法


Page({


data: {


logs: []


},


onLoad: function () {


this.setData({


logs: (wx.getStorageSync('logs') || []).map(function (log) {//通过wx.getStorageSync以获取本地内存的logs日志数据


return util.formatTime(new Date(log))//日期格式化


})


})


}


})


logs.json文件


{


"navigationBarTitleText": "查阅启动日志" //当前页面配置文件,设置window当前页面顶部导航系统栏标题等有关内容


}


基本页面结构和逻辑就这么直观,曝露给我们的没一点令人费解的东西。

TAG标签:
阅读推荐