百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> 微信小程序前端源码逻辑和工作流程解析
分享文章到:

微信小程序前端源码逻辑和工作流程解析

发布时间:09/01 来源:未知 浏览: 关键词:
看完微信小程序的前端代码真的让我热血沸腾啊,代码逻辑和设计一览无余,没有余外的东西,真的是大道至简。

废话不多说,直接剖析前端代码。个人观念,不免有疏漏,仅供参照 。

文件根本构造:

先看入口app.js,app(obj)注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。其他文件可以通过全局办法getApp()猎取app实例,进而直接调取它的属性或办法,例如(getApp().globalData)

//app.jsApp({
  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{      //调取登录接口      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.getStorageSync('logs')猎取当地缓存数据

getUserInfo函数,望文生义就是猎取登录会员信息,相当于此函数供给了猎取会员信息的接口,其他页面不调取天然不会施行。其他页面通过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,会调取会员登录接口。      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
         console.log(res)
              that.globalData.userInfo = res.userInfo//把会员信息赋给globalData,假如再次调取getUserInfo函数的时候,不需要调取登录接口
              typeof cb == "function" && cb(that.globalData.userInfo)//假如参数cb类型为函数,施行cb,猎取会员信息            }
          })
        }
      })
    }
  }

globalData对象用来储备全局数据,在其他地方调取

然后简要剖析下app.json文件,该文件作用是对微信小程序停止全局配置,决议页面文件的途径、窗口展现、设定网络超不时间、设定多 tab 等、

最重要的是pages属性,必填,为数组,数组内的元素为字符串性文件途径,指定小程序由哪些页面组成,第一项必需是小程序初始页面。

{  "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,这就是常见的模板文件,数据驱动,有过前端mvcmvvm项目开发的对这个必然不会生疏,究竟这是基于react开发的。  

<!--index.wxml-->
<view class="container">//视图容器
  <view  bindtap="bindViewTap" class="userinfo">
  //bindtap为容器绑定点击触摸事件,在触摸分开时触发bindViewTap事件处置函数,bindViewTap通过index.js page()设定增加
    <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
    //大双括号的变量来自于index.js的data对象解析成对应的值,并且是实时的
    <text class="userinfo-nickname">{{userInfo.nickName}}</text>
  </view>
  <view class="usermotto">
    <text class="user-motto">{{motto}}</text>
  </view>
</view>

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.wxmllogs.jslogs.wxsslogs.json,同理包管同名,才能完成结果渲染。

logs.wxml文件

<!--logs.wxml-->
<view class="container log-list">
  <block wx:for="{{logs}}" wx:for-item="log">
  //block容器作用,无其他实际含义。wx:for作用:遍历logs数组,遍历多少次,block块就会复制多少次,for-item等同于为
      遍历元素起一个变量名,利便援用。
    <text class="log-item">{{index + 1}}. {{log}}</text>
  </block>
</view>

logs.js 文件

//logs.js
var util = require('../../utils/util.js') 
//util.js相当于一个函数库,我们可以在这个文件内自定义扩展和封装一些常用的函数和办法
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当前页面顶部导航栏标题等相关内容
} 

根本页面构造和逻辑就这么简便,显露给我们的没有一点令人费解的东西。

小程序还供给了许多官方组件和API等候我们深挖,加油吧,少年!小程序官方文档地址

引荐教程:《微信小程序》

以上就是微信小程序前端源码逻辑和工作流程解析的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板