国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah applet WeChat Pembangunan program mini 微信 小程序前端源碼詳解及實(shí)例分析

微信 小程序前端源碼詳解及實(shí)例分析

Feb 22, 2017 pm 02:17 PM

這篇文章主要介紹了微信 小程序前端源碼詳解及實(shí)例分析的相關(guān)資料,需要的朋友可以參考下

微信小程序前端源碼邏輯和工作流

看完微信小程序的前端代碼真的讓我熱血沸騰啊,代碼邏輯和設(shè)計(jì)一目了然,沒有多余的東西,真的是大道至簡。

廢話不多說,直接分析前端代碼。個(gè)人觀點(diǎn),難免有疏漏,僅供參考。

文件基本結(jié)構(gòu):

微信 小程序前端源碼詳解及實(shí)例分析

先看入口app.js,app(obj)注冊一個(gè)小程序。接受一個(gè) object 參數(shù),其指定小程序的生命周期函數(shù)等。其他文件可以通過全局方法getApp()獲取app實(shí)例,進(jìn)而直接調(diào)用它的屬性或方法,例如(getApp().globalData)

//app.js
App({
 onLaunch: function () {
  //調(diào)用API從本地緩存中獲取數(shù)據(jù)
  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{
   //調(diào)用登錄接口
   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拓展的地方。下邊分析下自帶的幾個(gè)方法和屬性

onLaunch鉤子函數(shù)會(huì)在小程序初始化完成后會(huì)自動(dòng)執(zhí)行一次,然后在小程序生命周期里如果你不主動(dòng)調(diào)用onLaunch,它就不會(huì)在執(zhí)行。

var logs = wx.getStorageSync('logs') || []獲取本地緩存中的logs屬性,如果值為空,那么設(shè)置logs=[] 與HTML5中的localStorage作用相似

logs.unshift(Date.now()) 當(dāng)前登錄時(shí)間添加到數(shù)組中

wx.setStorageSync('logs', logs) 將數(shù)據(jù)存入本地緩存,因?yàn)閣x為全局對象,所以可以在其他文件中直接調(diào)用wx.getStorageSync('logs')獲取本地緩存數(shù)據(jù)

getUserInfo函數(shù),顧名思義就是獲取登錄用戶信息,相當(dāng)于此函數(shù)提供了獲取用戶信息的接口,其他頁面不調(diào)用自然不會(huì)執(zhí)行。其他頁面通過getApp().getUserInfo(function(userinfo){console.log(userinfo);})這種方式調(diào)用該方法,獲取用戶信息。

getUserInfo:function(cb){//參數(shù)為cb,類型為函數(shù)
  var that = this
  if(this.globalData.userInfo){//用戶信息不為空
   typeof cb == "function" && cb(this.globalData.userInfo)//如果參數(shù)cb的類型為函數(shù),那么執(zhí)行cb,獲取用戶信息;
  }else{//如果用戶信息為空,也就是說第一次調(diào)用getUserInfo,會(huì)調(diào)用用戶登錄接口。
   wx.login({
    success: function () {
     wx.getUserInfo({
      success: function (res) {
         console.log(res)
       that.globalData.userInfo = res.userInfo//把用戶信息賦給globalData,如果再次調(diào)用getUserInfo函數(shù)的時(shí)候,不需要調(diào)用登錄接口
       typeof cb == "function" && cb(that.globalData.userInfo)//如果參數(shù)cb類型為函數(shù),執(zhí)行cb,獲取用戶信息
      }
     })
    }
   })
  }
 }

globalData對象用來存儲(chǔ)全局?jǐn)?shù)據(jù),在其他地方調(diào)用

然后簡要分析下app.json文件,該文件作用是對微信小程序進(jìn)行全局配置,決定頁面文件的路徑、窗口表現(xiàn)、設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間、設(shè)置多 tab 等、

  最重要的是pages屬性,必填,為數(shù)組,數(shù)組內(nèi)的元素為字符串性文件路徑,指定小程序由哪些頁面組成,第一項(xiàng)必須是小程序初始頁面。

{
 "pages":[
  "pages/index/index",
  "pages/logs/logs"
 ],
 "window":{
  "backgroundTextStyle":"light",
  "navigationBarBackgroundColor": "#fff",
  "navigationBarTitleText": "WeChat",
  "navigationBarTextStyle":"black"
 }
}

然后來看下項(xiàng)目index和logs文件夾。微信小程序初始項(xiàng)目把每個(gè)頁面相關(guān)的js、wxss、wxml放在各自的文件,這樣看起來結(jié)構(gòu)清晰明朗很多。

  先來看index文件夾,即小程序初始頁面。index文件夾下為index.js、index.wxml、index.wxss三個(gè)小文件。小程序把js、css、html代碼分離開來,放在獨(dú)自的文件里,各司其職。js和樣式表文件名必須與當(dāng)前文件夾的wxml文件名保持一致,這樣才能保證js和樣式表的效果能夠在頁面中顯現(xiàn)出來。我很欣賞這樣的設(shè)計(jì)理念,整齊劃一,職責(zé)明確,減輕代碼設(shè)計(jì)復(fù)雜度。

  index.wxml,這就是常見的模板文件,數(shù)據(jù)驅(qū)動(dòng),有過前端mvc、mvvm項(xiàng)目開發(fā)的對這個(gè)一定不會(huì)陌生,畢竟這是基于react開發(fā)的?! ?/span>

<!--index.wxml-->
<view class="container">//視圖容器
 <view bindtap="bindViewTap" class="userinfo">//bindtap為容器綁定點(diǎn)擊觸摸事件,在觸摸離開時(shí)觸發(fā)bindViewTap事件處理函數(shù),bindViewTap通過index.js page()設(shè)置添加
  <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>//大雙括號(hào)的變量來自于index.js的data對象解析成對應(yīng)的值,而且是實(shí)時(shí)的
  <text class="userinfo-nickname">{{userInfo.nickName}}</text>
 </view>
 <view class="usermotto">
  <text class="user-motto">{{motto}}</text>
 </view>
</view>

  index.js,與reaact用法幾無二異,換湯不換藥。page()來注冊一個(gè)頁面。接受一個(gè) OBJECT 參數(shù),其指定頁面的初始數(shù)據(jù)、生命周期函數(shù)、事件處理函數(shù)等。

var app = getApp() // 獲取入口文件app的應(yīng)用實(shí)例
Page({
 data: {
  motto: &#39;Hello World&#39;,
  userInfo: {}
 },
 //自定義事件處理函數(shù),點(diǎn)擊.userinfo的容易觸發(fā)此函數(shù)
 bindViewTap: function() {
  wx.navigateTo({//全局對象wx的跳轉(zhuǎn)頁面方法
   url: &#39;../logs/logs&#39;
  })
 },
 onLoad: function () {//發(fā)生頁面加載時(shí),自動(dòng)觸發(fā)該生命周期函數(shù)
  console.log(&#39;onLoad&#39;)
  var that = this
  //調(diào)用應(yīng)用實(shí)例的方法獲取全局?jǐn)?shù)據(jù)
  app.getUserInfo(function(userInfo){
   //更新數(shù)據(jù),頁面自動(dòng)渲染
   that.setData({
    userInfo:userInfo
   })
  })
 }
})

  index.wxss文件只渲染當(dāng)前所屬頁面,會(huì)覆蓋全局app.wxss同一樣式。

  再分析下logs日志文件夾,logs文件夾下為logs.wxml、logs.js、logs.wxss、logs.json,同理保證同名,才能完成效果渲染。

  logs.wxml文件

<!--logs.wxml-->
<view class="container log-list">
 <block wx:for="{{logs}}" wx:for-item="log">//block容器作用,無其他實(shí)際含義。wx:for作用:遍歷logs數(shù)組,遍歷多少次,block塊就會(huì)復(fù)制多少次,for-item等同于為<br>遍歷元素起一個(gè)變量名,方便引用。<br>
  <text class="log-item">{{index + 1}}. {{log}}</text>
 </block>
</view>

  logs.js 文件

//logs.js
var util = require(&#39;../../utils/util.js&#39;) //util.js相當(dāng)于一個(gè)函數(shù)庫,我們可以在這個(gè)文件內(nèi)自定義擴(kuò)展和封裝一些常用的函數(shù)和方法
Page({
 data: {
  logs: []
 },
 onLoad: function () {
  this.setData({
   logs: (wx.getStorageSync(&#39;logs&#39;) || []).map(function (log) {//通過wx.getStorageSync獲取本地緩存的logs日志數(shù)據(jù)
    return util.formatTime(new Date(log))//日期格式化
   })
  })
 }
})

  logs.json文件

{
  "navigationBarTitleText": "查看啟動(dòng)日志"  //當(dāng)前頁面配置文件,設(shè)置window當(dāng)前頁面頂部導(dǎo)航欄標(biāo)題等相關(guān)內(nèi)容
}

通過此文希望能幫助到大家,謝謝大家對本站的支持!

更多微信 小程序前端源碼詳解及實(shí)例分析相關(guān)文章請關(guān)注PHP中文網(wǎng)!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276