亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

微信小程序開發的基本流程步驟

2019-11-19 12:11:21
字體:
來源:轉載
供稿:網友

一,微信小程序簡介

1,微信小程序簡稱小程序,張小龍在微信公開課 Pro 上發布的小程序正式上線,時間是2017年1月9日。

2,微信小程序這個詞可以分解為“微信”和“小程序”兩部分

(1),其中“微信”可以理解為“微信中的”,指的是小程序的執行環境;當然微信在提供執行環境的同時也延長了用戶使用微信的時間。

(2),“小程序”是說它首先是程序,然后具備輕便的特征。小程序并不像其他應用那樣,它不需要安裝,而是通過掃描二維碼等打開后直接執行;用完以后也不需要卸載。這就是所謂用完即走的原則。

3,微信小程序,很多類似形態的應用都采用類似的架構:

  • 使用 JSON 技術來表現應用的配置信息。包含應用的基本信息,頁面配置和路由,應用全體的信息等。
  • 使用經過定制 CSS+XML 技術來實現視圖層的描述。畫面元素,例如列表、按鈕、文本框、選擇框等都通過 XML 語言來描述,遵從 XML 語法,對于頁面的共同風格,使用 CSS 進行定義。
  • 使用 JavaScript 語言來實現邏輯層結構。包括用戶操作的處理,系統 API 的調用等。
  • 架構在視圖層和邏輯層之間提供數據和事件傳輸功能,從而盡量減少難度。由于類似應有都屬于輕應用,所以提供的功能都比較單一。

4,JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(W3C 制定的 JavaScript 規范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。

5,XML(Extensible Markup Language),中文名為可擴展標記語言,標準通用標記語言的子集,是一種用于標記電子文件使其具有結構性的標記語言。

在電子計算機中,標記指計算機所能理解的信息符號,通過此種標記,計算機之間可以處理包含各種的信息,比如文章等。它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。它非常適合萬維網傳輸,提供統一的方法來描述和交換獨立于應用程序或供應商的結構化數據。是 Internet 環境中跨平臺的、依賴于內容的技術,也是當今處理分布式結構信息的有效工具。早在1998年,W3C 就發布了 XML1.0 規范,使用它來簡化 Internet 的文檔信息傳輸。

6,CSS層疊樣式表(英文全稱:Cascading Style Sheets)是一種用來表現 HTML 或 XML 等文件樣式的計算機語言。CSS 不僅可以靜態地修飾網頁,還可以配合各種腳本語言動態地對網頁各元素進行格式化。CSS 能夠對網頁中元素位置的排版進行像素級精確控制,支持幾乎所有的字體字號樣式,擁有對網頁對象和模型樣式編輯的能力。

7,JavaScript 一種直譯式腳本語言,是一種動態類型、弱類型、基于原型的語言,內置支持類型。它的解釋器被稱為 JavaScript 引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在 HTML 網頁上使用,用來給 HTML 網頁增加動態功能。

二,注冊微信小程序

在創建自己的微信小程序之前,首先需要注冊小程序賬號,有如下賬號類型:

具體的注冊流程,可以參考官方的簡易教程

三,安裝工具,創建項目

第一步:下載微信小程序開發者工具并安裝,下載路徑:

https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html

進到下載界面后,根據自己的操作系統選擇相應的鏈接進行下載,下載完成后進行安裝。

第二步:安裝登錄工具

開發者工具安裝完成后我們就可以將其打開,初次打開會需要用微信掃碼登錄,如下圖,用手機微信掃一掃后確認登錄就可以了。

第三步:選擇一個項目類型

登錄成功后,如果是第一次使用該工具會彈出選擇項目類型的窗口,如下圖:

第四步:創建一個項目

選擇項目類型成功后,會彈出創建項目的窗口,如下圖:

​ 在創建過程中,如果選擇的本地文件夾是個空文件夾會出來一個勾選項“建立云開發快速啟動模版”,為方便初學者了解微信小程序的基本代碼結構,請勾選此項,勾選后,開發者工具會幫助我們在開發目錄里生成一個簡單的 demo,如下圖:

四,項目代碼結構說明與開發

4.1,項目代碼結構

點擊開發者工具上側導航的“編輯器”,我們可以看到這個項目,已經初始化并包含了一些簡單的代碼文件。最關鍵也是必不可少的,是 app.js、app.json、app.wxss 這三個。其中,.js后綴的是腳本文件,.json后綴的文件是配置文件,.wxss后綴的是樣式表文件。微信小程序會讀取這些文件,并生成小程序實例。

下面我們簡單了解這三個文件的功能,方便修改以及從頭開發自己的微信小程序。

​ 1、app.js是小程序的腳本代碼。我們可以在這個文件中監聽并處理小程序的生命周期函數、聲明全局變量。調用框架提供的豐富的 API,如本例的同步存儲及同步讀取本地數據。

2、​ app.json 是對整個小程序的全局配置。我們可以在這個文件中配置小程序是由哪些頁面組成,配置小程序的窗口背景色,配置導航條樣式,配置默認標題。注意該文件不可添加任何注釋。

3、app.wxss 是整個小程序的公共樣式表。我們可以在頁面組件的 class 屬性上直接使用 app.wxss 中聲明的樣式規則。

我們注意到,在實例程序的代碼中還有2個文件夾,一個是pages,一個是style,其中style是放通用樣式的一個文件夾,pages是存放所有頁面的文件夾。我們著重講一下這個pages.

4.2,小程序頁面文件構成

在這個示例中,我們有七個頁面,index 頁面,即歡迎頁,他們都在 pages 目錄下。微信小程序中的每一個頁面的【路徑+頁面名】都需要寫在 app.json 的 pages 中,且 pages 中的第一個頁面是小程序的首頁。

每一個小程序頁面是由同路徑下同名的四個不同后綴文件的組成,如:index.js、index.wxml、index.wxss、index.json。.js后綴的文件是腳本文件,.json后綴的文件是配置文件,.wxss后綴的是樣式表文件,.wxml后綴的文件是頁面結構文件。

​ index.wxml 是頁面的結構文件:

<!--index.wxml--><view class="container"> <!-- 用戶 openid --> <view class="userinfo">  <button    open-type="getUserInfo"    bindgetuserinfo="onGetUserInfo"   class="userinfo-avatar"   style="background-image: url({{avatarUrl}})"  ></button>  <view>   <text>jackson影琪</text></view> </view> <view class="text-title">   <text>Hello world</text></view> </view>

本例中使用了<view/><button/>、<text/>來搭建頁面結構,綁定數據和交互處理函數。

​ index.js 是頁面的腳本文件,在這個文件中我們可以監聽并處理頁面的生命周期函數、獲取小程序實例,聲明并處理數據,響應頁面交互事件等。

//index.jsconst app = getApp()Page({ data: {  avatarUrl: './user-unlogin.png',  userInfo: {},  logged: false,  takeSession: false,  requestResult: '' }, onLoad: function() {  if (!wx.cloud) {   wx.redirectTo({    url: '../chooseLib/chooseLib',   })   return  }  // 獲取用戶信息  wx.getSetting({   success: res => {    if (res.authSetting['scope.userInfo']) {     // 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框     wx.getUserInfo({      success: res => {       this.setData({        avatarUrl: res.userInfo.avatarUrl,        userInfo: res.userInfo       })      }     })    }   }  }) }, onGetUserInfo: function(e) {  if (!this.logged && e.detail.userInfo) {   this.setData({    logged: true,    avatarUrl: e.detail.userInfo.avatarUrl,    userInfo: e.detail.userInfo   })  } }, onGetOpenid: function() {  // 調用云函數  wx.cloud.callFunction({   name: 'login',   data: {},   success: res => {    console.log('[云函數] [login] user openid: ', res.result.openid)    app.globalData.openid = res.result.openid    wx.navigateTo({     url: '../userConsole/userConsole',    })   },   fail: err => {    console.error('[云函數] [login] 調用失敗', err)    wx.navigateTo({     url: '../deployFunctions/deployFunctions',    })   }  }) }, // 上傳圖片 doUpload: function () {  // 選擇圖片  wx.chooseImage({   count: 1,   sizeType: ['compressed'],   sourceType: ['album', 'camera'],   success: function (res) {    wx.showLoading({     title: '上傳中',    })    const filePath = res.tempFilePaths[0]        // 上傳圖片    const cloudPath = 'my-image' + filePath.match(//.[^.]+?$/)[0]    wx.cloud.uploadFile({     cloudPath,     filePath,     success: res => {      console.log('[上傳文件] 成功:', res)      app.globalData.fileID = res.fileID      app.globalData.cloudPath = cloudPath      app.globalData.imagePath = filePath            wx.navigateTo({       url: '../storageConsole/storageConsole'      })     },     fail: e => {      console.error('[上傳文件] 失?。?, e)      wx.showToast({       icon: 'none',       title: '上傳失敗',      })     },     complete: () => {      wx.hideLoading()     }    })   },   fail: e => {    console.error(e)   }  }) },})

index.wxss 是頁面的樣式表:

/**index.wxss**/page { background: #f6f6f6; display: flex; flex-direction: column; justify-content: center;}.userinfo, .uploader, .tunnel { margin-top: 40rpx; height: 140rpx; width: 100%; background: #fff; border: 1px solid rgba(0, 0, 0, 0.1); border-left: none; border-right: none; display: flex; flex-direction: row; align-items: center; transition: all 300ms ease;}.userinfo-avatar { width: 100rpx; height: 100rpx; margin: 20rpx; border-radius: 50%; background-size: cover; background-color: white;}.userinfo-avatar:after { border: none;}.userinfo-nickname { font-size: 32rpx; color: #007aff; background-color: white; background-size: cover;}.userinfo-nickname::after { border: none;}.uploader, .tunnel { height: auto; padding: 0 0 0 40rpx; flex-direction: column; align-items: flex-start; box-sizing: border-box;}.uploader-text, .tunnel-text { width: 100%; line-height: 52px; font-size: 34rpx; color: #007aff;}.uploader-container { width: 100%; height: 400rpx; padding: 20rpx 20rpx 20rpx 0; display: flex; align-content: center; justify-content: center; box-sizing: border-box; border-top: 1px solid rgba(0, 0, 0, 0.1);}.uploader-image { width: 100%; height: 360rpx;}.tunnel { padding: 0 0 0 40rpx;}.tunnel-text { position: relative; color: #222; display: flex; flex-direction: row; align-content: center; justify-content: space-between; box-sizing: border-box; border-top: 1px solid rgba(0, 0, 0, 0.1);}.tunnel-text:first-child { border-top: none;}.tunnel-switch { position: absolute; right: 20rpx; top: -2rpx;}.disable { color: #888;}.service { position: fixed; right: 40rpx; bottom: 40rpx; width: 140rpx; height: 140rpx; border-radius: 50%; background: linear-gradient(#007aff, #0063ce); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3); display: flex; align-content: center; justify-content: center; transition: all 300ms ease;}.service-button { position: absolute; top: 40rpx;}.service:active { box-shadow: none;}.request-text { padding: 20rpx 0; font-size: 24rpx; line-height: 36rpx; word-break: break-all;}.text-title{margin-top: 50%;}.text-title text{ font-size: 96rpx; font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;}

頁面的樣式表是非必要的。當有頁面樣式表時,頁面的樣式表中的樣式規則會層疊覆蓋 app.wxss 中的樣式規則。如果不指定頁面的樣式表,也可以在頁面的結構文件中直接使用 app.wxss 中指定的樣式規則。

​ index.json 是頁面的配置文件:

​ 頁面的配置文件是非必要的。當有頁面的配置文件時,配置項在該頁面會覆蓋 app.json 的 window 中相同的配置項。如果沒有指定的頁面配置文件,則在該頁面直接使用 app.json 中的默認配置。

{ "pages": [  "pages/index/index",  "pages/userConsole/userConsole",  "pages/storageConsole/storageConsole",  "pages/databaseGuide/databaseGuide",  "pages/addFunction/addFunction",  "pages/deployFunctions/deployFunctions",  "pages/chooseLib/chooseLib" ], "window": {  "backgroundColor": "#F6F6F6",  "backgroundTextStyle": "light",  "navigationBarBackgroundColor": "#F6F6F6",  "navigationBarTitleText": "jackson影琪",  "navigationBarTextStyle": "black" }}

運行結果如下:

手機預覽

​ 開發者工具上側菜單欄,點擊"預覽",掃碼后即可在微信客戶端中體驗。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品国产97久久久久久免费| 亚洲精品小视频| 亚洲free嫩bbb| 国产精品91久久久久久| 国产精品三级在线| 久久精品国产一区二区三区| 国产丝袜一区视频在线观看| 欧美第一淫aaasss性| 精品久久久香蕉免费精品视频| 国产精品香蕉国产| 国产精品久久久久久av福利软件| 久久亚洲影音av资源网| 午夜精品久久久久久久99热| 美女啪啪无遮挡免费久久网站| 欧美国产日韩视频| 色爱av美腿丝袜综合粉嫩av| 91久久精品国产91久久性色| 亚洲精品av在线播放| 日韩女在线观看| 国产视频精品一区二区三区| 国产视频精品一区二区三区| 欧美国产日本在线| 精品久久久视频| 日韩欧美在线免费| 国产精品日日摸夜夜添夜夜av| 日韩免费在线观看视频| 欧美一级视频免费在线观看| 中文字幕久久久av一区| 在线观看国产欧美| 亚洲大胆人体在线| 欧美日韩在线另类| 亚洲999一在线观看www| 日韩国产欧美精品在线| 色噜噜狠狠狠综合曰曰曰| 国产精品福利小视频| 国产性猛交xxxx免费看久久| xx视频.9999.com| 国产视频精品xxxx| 精品高清一区二区三区| 亚洲老头同性xxxxx| 日韩成人免费视频| 国产精品日韩在线一区| 日韩欧美在线视频日韩欧美在线视频| 亚洲偷欧美偷国内偷| 欧美在线视频网站| 日日摸夜夜添一区| 久久99精品国产99久久6尤物| 久久九九国产精品怡红院| 国产日韩精品在线观看| 91精品啪在线观看麻豆免费| www.欧美精品| 精品偷拍一区二区三区在线看| 91精品国产高清久久久久久| 国产精品丝袜高跟| 亚洲va电影大全| 亚洲人成网站999久久久综合| 日韩中文字幕国产| 亚洲人成电影在线观看天堂色| 色爱精品视频一区| 18性欧美xxxⅹ性满足| 97久久超碰福利国产精品…| 午夜精品久久久久久久99热浪潮| 欧美成人黑人xx视频免费观看| 91精品视频免费观看| 色偷偷综合社区| 日韩电影免费观看在线| 精品香蕉一区二区三区| 久久久久亚洲精品国产| 日产精品99久久久久久| 亚洲色图13p| 青青久久av北条麻妃海外网| 欧美激情欧美激情| 欧美激情精品久久久久久黑人| 91高清免费在线观看| 亚洲男人天天操| 欧美日韩成人黄色| 热re99久久精品国产66热| 日韩网站免费观看| 久久精品国产91精品亚洲| 91亚洲精品久久久久久久久久久久| 欧美国产视频一区二区| 欧美视频在线免费| 欧美高清视频在线观看| 久久99精品久久久久久青青91| 久久精品亚洲94久久精品| 久久噜噜噜精品国产亚洲综合| 欧美洲成人男女午夜视频| 成人午夜一级二级三级| 亚洲精品福利在线观看| 亚洲国产精品高清久久久| 大胆欧美人体视频| 久久精品国产成人精品| 欲色天天网综合久久| 久久99精品久久久久久琪琪| 97超级碰碰碰久久久| 亚洲一二在线观看| 97av在线视频免费播放| 久操成人在线视频| 亚洲一区二区三区在线视频| 欧美中文字幕在线视频| 日本一区二区在线播放| 亚洲第一色在线| 中文字幕在线看视频国产欧美在线看完整| 亚洲精品中文字幕有码专区| 在线播放国产一区中文字幕剧情欧美| 91精品视频观看| 欧美在线国产精品| 久久国产精品久久国产精品| 欧美激情亚洲激情| 国产精品极品在线| 国产精品久久久久久av福利| 日韩精品免费电影| 国产91网红主播在线观看| 91精品视频免费观看| 亚洲精品网站在线播放gif| 中文字幕日韩欧美在线| 九九久久国产精品| 日本乱人伦a精品| 国产精品三级在线| 97香蕉超级碰碰久久免费软件| 亚洲色图综合久久| 久久综合五月天| 亚洲美女av电影| 国产精品免费一区| 91av视频在线免费观看| 日韩国产精品视频| 亚洲免费影视第一页| 亚洲丝袜av一区| 日韩精品在线电影| 国产一区二区三区久久精品| 国语自产精品视频在免费| 国产亚洲成av人片在线观看桃| 在线观看精品自拍私拍| 久久久久成人精品| 17婷婷久久www| 国产成人涩涩涩视频在线观看| 欧美国产第一页| 亚洲片国产一区一级在线观看| 亚洲高清av在线| 久久精品成人一区二区三区| 狠狠爱在线视频一区| 欧美一级黄色网| 亚洲精品91美女久久久久久久| 久久全国免费视频| 国产精品草莓在线免费观看| 亚洲va欧美va国产综合剧情| 久久精品人人做人人爽| 欧美激情2020午夜免费观看| 欧洲亚洲妇女av| 大桥未久av一区二区三区| 55夜色66夜色国产精品视频| 亚洲国产一区自拍| 欧美激情久久久| 久久久久久尹人网香蕉| 亚洲自拍欧美色图| 精品国产一区二区在线| 久久免费少妇高潮久久精品99| 91精品国产亚洲| 91久久久国产精品| 国产精品一区二区久久精品| 久久精品国产91精品亚洲| 久久99热精品| 91麻豆国产精品| 久久免费福利视频|