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

首頁(yè) 微信小程式 小程式開發(fā) 微信小程式前端原始碼的解析

微信小程式前端原始碼的解析

Jun 27, 2018 pm 05:35 PM
微信 微信小程式

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

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

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

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

檔案基本架構(gòu):

先看入口app.js,app(obj)註冊(cè)一個(gè)小程式。接受一個(gè) object 參數(shù),其指定小程式的生命週期函數(shù)等。其他檔案可以透過(guò)全域方法getApp()取得app實(shí)例,進(jìn)而直接呼叫它的屬性或方法,例如(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()) 目前登入時(shí)間加入陣列中

wx.setStorageSync('logs', logs) 將資料存入本機(jī)緩存,因?yàn)閣x為全域?qū)ο?,所以可以在其他檔案中直接呼叫wx.getStorageSync('logs')取得本機(jī)快取資料

getUserInfo函數(shù),顧名思義就是取得登入使用者信息,相當(dāng)於此函數(shù)提供了取得使用者資訊的接口,其他頁(yè)面不呼叫自然不會(huì)執(zhí)行。其他頁(yè)面透過(guò)getApp().getUserInfo(function(userinfo){console.log(userinfo);})這種方式呼叫該方法,以取得使用者資訊。

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{//如果用戶信息為空,也就是說(shuō)第一次調(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物件用來(lái)儲(chǔ)存全域數(shù)據(jù),在其他地方呼叫

然後簡(jiǎn)要分析下app.json檔案,此檔案作用是對(duì)微信小程式進(jìn)行全域配置,決定頁(yè)面檔案的路徑、視窗表現(xiàn)、設(shè)定網(wǎng)路逾時(shí)時(shí)間、設(shè)定多tab 等、

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

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

然後來(lái)看下專案index和logs資料夾。微信小程式初始專案把每個(gè)頁(yè)面相關(guān)的js、wxss、wxml放在各自的文件,這樣看起來(lái)結(jié)構(gòu)清晰明朗很多。

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

  index.wxml,這就是常見的模板文件,資料驅(qū)動(dòng),有過(guò)前端mvc、mvvm專案開發(fā)的對(duì)這個(gè)一定不會(huì)陌生,畢竟這是基於react開發(fā)的?! ?/span>

<!--index.wxml-->
<view class="container">//視圖容器
 <view bindtap="bindViewTap" class="userinfo">//bindtap為容器綁定點(diǎn)擊觸摸事件,在觸摸離開時(shí)觸發(fā)bindViewTap事件處理函數(shù),bindViewTap通過(guò)index.js page()設(shè)置添加
  <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>//大雙括號(hào)的變量來(lái)自于index.js的data對(duì)象解析成對(duì)應(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用法幾無(wú)二異,換湯不換藥。 page()來(lái)註冊(cè)一個(gè)頁(yè)面。接受一個(gè) OBJECT 參數(shù),其指定頁(yè)面的初始資料、生命週期函數(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({//全局對(duì)象wx的跳轉(zhuǎn)頁(yè)面方法
   url: &#39;../logs/logs&#39;
  })
 },
 onLoad: function () {//發(fā)生頁(yè)面加載時(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ù),頁(yè)面自動(dòng)渲染
   that.setData({
    userInfo:userInfo
   })
  })
 }
})

  index.wxss檔案只渲染目前所屬頁(yè)面,會(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容器作用,無(wú)其他實(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ù)庫(kù),我們可以在這個(gè)文件內(nèi)自定義擴(kuò)展和封裝一些常用的函數(shù)和方法
Page({
 data: {
  logs: []
 },
 onLoad: function () {
  this.setData({
   logs: (wx.getStorageSync(&#39;logs&#39;) || []).map(function (log) {//通過(guò)wx.getStorageSync獲取本地緩存的logs日志數(shù)據(jù)
    return util.formatTime(new Date(log))//日期格式化
   })
  })
 }
})

#  logs.json檔案

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

基本頁(yè)面結(jié)構(gòu)和邏輯就這麼簡(jiǎn)單,暴露給我們的沒(méi)有一點(diǎn)令人費(fèi)解的東西。

小程式也提供了許多官方組件和API等待我們深挖,加油吧,少年!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)!

相關(guān)推薦:

微信小程式標(biāo)籤的實(shí)作方法

微信小程式實(shí)作拖曳image 觸控事件監(jiān)聽

#DVA框架統(tǒng)一處理所有頁(yè)面的loading狀態(tài)

###########

以上是微信小程式前端原始碼的解析的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
抖音網(wǎng)頁(yè)版入口登錄鏈接地址https 抖音網(wǎng)頁(yè)版入口網(wǎng)址免費(fèi) 抖音網(wǎng)頁(yè)版入口登錄鏈接地址https 抖音網(wǎng)頁(yè)版入口網(wǎng)址免費(fèi) May 22, 2025 pm 04:24 PM

抖音網(wǎng)頁(yè)版的登錄入口是https://www.douyin.com/。登錄步驟包括:1.打開瀏覽器;2.輸入網(wǎng)址https://www.douyin.com/;3.點(diǎn)擊“登錄”按鈕並選擇登錄方式;4.輸入賬號(hào)密碼;5.完成登錄。網(wǎng)頁(yè)版提供了瀏覽、搜索、互動(dòng)、上傳視頻和個(gè)人主頁(yè)管理等功能,具有大屏幕體驗(yàn)、多任務(wù)處理、便捷的賬號(hào)管理和數(shù)據(jù)統(tǒng)計(jì)等優(yōu)勢(shì)。

拷貝漫畫(官網(wǎng)入口)_拷貝漫畫(nba)正版在線閱讀入口 拷貝漫畫(官網(wǎng)入口)_拷貝漫畫(nba)正版在線閱讀入口 Jun 05, 2025 pm 04:12 PM

拷貝漫畫無(wú)疑是一個(gè)不容錯(cuò)過(guò)的寶藏。在這裡,你可以找到各種風(fēng)格的籃球漫畫,從熱血?jiǎng)?lì)志的競(jìng)技故事,到輕鬆幽默的日常喜劇,應(yīng)有盡有。無(wú)論是想重溫經(jīng)典,還是想發(fā)掘新作,拷貝漫畫都能滿足你的需求。通過(guò)拷貝漫畫提供的正版在線閱讀入口,你將告別盜版資源的困擾,享受高清流暢的閱讀體驗(yàn),更能支持你喜愛(ài)的漫畫作者,為正版漫畫的發(fā)展貢獻(xiàn)一份力量。

uc瀏覽器與qq瀏覽器哪個(gè)好用 uc和qq瀏覽器深度對(duì)比評(píng)測(cè) uc瀏覽器與qq瀏覽器哪個(gè)好用 uc和qq瀏覽器深度對(duì)比評(píng)測(cè) May 22, 2025 pm 08:33 PM

選擇UC瀏覽器還是QQ瀏覽器取決於你的需求:1.UC瀏覽器適合追求快速加載和豐富娛樂(lè)功能的用戶;2.QQ瀏覽器適合需要穩(wěn)定性和與騰訊產(chǎn)品無(wú)縫連接的用戶。

AI寫作軟件排行榜單前十名推薦 AI寫作軟件哪些免費(fèi) AI寫作軟件排行榜單前十名推薦 AI寫作軟件哪些免費(fèi) Jun 04, 2025 pm 03:27 PM

結(jié)合 2025 年最新行業(yè)動(dòng)態(tài)與多維度評(píng)測(cè)數(shù)據(jù),以下為綜合排名前十的 AI 寫作軟件推薦,涵蓋通用創(chuàng)作、學(xué)術(shù)研究、商業(yè)營(yíng)銷等主流場(chǎng)景,同時(shí)兼顧中文優(yōu)化與本地化服務(wù):

奈斯漫畫官方頁(yè)面免費(fèi)漫畫在線看 奈斯漫畫登錄頁(yè)面免費(fèi)入口網(wǎng)站 奈斯漫畫官方頁(yè)面免費(fèi)漫畫在線看 奈斯漫畫登錄頁(yè)面免費(fèi)入口網(wǎng)站 Jun 12, 2025 pm 08:18 PM

奈斯漫畫,一個(gè)致力於為漫畫愛(ài)好者打造的沉浸式閱讀體驗(yàn)平臺(tái),匯聚了海量國(guó)內(nèi)外優(yōu)質(zhì)漫畫資源。它不僅僅是一個(gè)漫畫閱讀平臺(tái),更是一個(gè)連接漫畫家與讀者、分享漫畫文化的社區(qū)。通過(guò)簡(jiǎn)潔直觀的界面設(shè)計(jì)和強(qiáng)大的搜索功能,奈斯漫畫讓你能夠輕鬆找到心儀的作品,享受流暢舒適的閱讀體驗(yàn)。告別漫長(zhǎng)的等待和繁瑣的操作,即刻進(jìn)入奈斯漫畫的世界,開啟你的漫畫之旅吧!

蛙漫 網(wǎng)址在線看入口 漫蛙漫畫(網(wǎng)頁(yè)入口)在線觀看 蛙漫 網(wǎng)址在線看入口 漫蛙漫畫(網(wǎng)頁(yè)入口)在線觀看 Jun 12, 2025 pm 08:06 PM

蛙漫漫畫,憑藉其豐富多元的漫畫資源和便捷流暢的在線閱讀體驗(yàn),已成為眾多漫畫愛(ài)好者的首選。它就像一個(gè)充滿活力的池塘,源源不斷地湧現(xiàn)出新鮮有趣的故事,等待著你去發(fā)現(xiàn)和探索。蛙漫漫畫涵蓋了各種題材,從熱血冒險(xiǎn)到甜蜜戀愛(ài),從奇幻科幻到懸疑推理,無(wú)論你喜歡哪種類型,都能在這裡找到心儀的作品。其簡(jiǎn)潔直觀的界面設(shè)計(jì),更讓你能夠輕鬆上手,快速找到想看的漫畫,沉浸在精彩紛呈的漫畫世界中。

包子漫畫(入口)_包子漫畫(新入口)2025 包子漫畫(入口)_包子漫畫(新入口)2025 Jun 05, 2025 pm 04:18 PM

在這裡,您可以盡情暢遊於浩瀚的漫畫海洋,探索各種題材和風(fēng)格的作品,從熱血激昂的少年漫,到細(xì)膩動(dòng)人的少女漫,從懸疑燒腦的推理漫,到輕鬆搞笑的日常漫,應(yīng)有盡有,總有一款能夠觸動(dòng)您的心弦。我們不僅擁有海量的正版漫畫資源,還不斷引進(jìn)和更新最新的作品,確保您能夠第一時(shí)間閱讀到您喜愛(ài)的漫畫。

b安最新註冊(cè)地址_怎麼註冊(cè)b安交易所 b安最新註冊(cè)地址_怎麼註冊(cè)b安交易所 May 26, 2025 pm 07:12 PM

2025b安最新官網(wǎng)入口地址:https://www.marketwebb.co/zh-CN/join?ref=507720986&amp;type=wenzi;幣安(Binance)交易所是一家全球性的加密貨幣交易所,服務(wù)包括北美、歐洲、臺(tái)灣、中東、香港、馬來(lái)西亞在內(nèi)的180個(gè)國(guó)家地區(qū),提供超過(guò)600種加密貨幣,在全球擁有2.7億註冊(cè)用戶。

See all articles