「2.0」一個人開發一個App,小程式從0到1,文件剖析

来源:https://www.cnblogs.com/halfcode/archive/2020/01/21/12222228.html
-Advertisement-
Play Games

趕快打開微信開發工具,快速進到項目視窗中。展開pages,展開index,展開logs,展開utils,展開一切可以展開的。唯有如此,方能見到整個項目的全貌。項目中,工程配置文件project.config.json,可用來配置appid、項目名稱、調試基礎庫,還有雲開發的文件夾路徑,至於其他的,幾... ...


不知你是不是見到“文件剖析”這4個大字,才點進來看一看的?如果真是的話,那我可以坦誠、真心、負責任地告訴你:你上當了,你上了賊船啦,如果你現在想跳的話,還來得及,反正茫茫大海中,鯊魚正缺搞程式的人。說你上當了,是因為我根本就剖析不了。我頂多只能做到分析。

2.1 配置文件分析

趕快打開微信開發工具,快速進到項目視窗中。展開pages,展開index,展開logs,展開utils,展開一切可以展開的。唯有如此,方能見到整個項目的全貌。

項目中,工程配置文件project.config.json,可用來配置appid、項目名稱、調試基礎庫,還有雲開發的文件夾路徑,至於其他的,幾乎不會做任何改動。

項目中,頁面索引文件sitemap.json,可配置頁面是否可被索引(搜索), action為allow表示同意,disallow表示不同意;page為*表示所有頁面,pages/index

/index指定某個頁面。

小程式項目中,除了配置文件外,還有應用文件和頁面文件。

 

2.2 頁面文件分析

一個小程式應用,由index,logs等多個頁面組成。一個頁面,由負責配置的json,佈局的wxml,樣式的wxss和業務邏輯的js組成。

這是一個關於1+1+1+1=4的故事,故事從配置文件json開始。

2.2.1 json文件

json文件可配置視窗頂部導航欄的背景色、標題、標題顏色和引入第3方組件。第3方組件,唯有在json文件中引入,方可在wxml文件中使用。

{

"usingComponents": {

"mp-cells": "../../components/cells/cells",

"mp-cell": "../../components/cell/cell"

},

"navigationBarTitleText": "關於",

"navigationBarTextStyle": "black"

}

2.2.2 wxml文件

wxml文件,對手機界面進行佈局。佈局可從左到右,上到下;可從右到左,下到上;可左青龍,右白虎,上圖片,下按鈕。

上圖片,下按鈕是我要實現功能,而左青龍,右白虎是留給你的作業,記得按時完成哦。完成之後,仔細觀察一下代碼,你就會發現有個莫名其妙的container,莫名其妙地出現在那裡。不要急,存在即是合理,只是還沒說到wxss文件而已。

<view class="container">

<image src="../../images/long.png" style="width: 750rpx;height: 450rpx"></image>

<button>確定</button>

</view>

2.2.3 wxss文件

wxss文件,是wxml的好基友,一直站在wxml背後,承擔著化妝師(樣式)的工作。這就是,每個成功的wxml,背後都會有一個wxss的來由。正是有了wxss的支持,wxml才可以放心、大膽地佈局,大膽地佈局天下。

好看的皮囊千篇一律,有趣的靈魂萬里挑一,光有佈局,光有一張靚麗的外表,不足以成就大業。若想成就大業,得靠js文件來實現,實現業務邏輯。

.container {

height: 100%;

display: flex;

flex-direction: column;

align-items: center;

}

2.2.4 js文件

js文件,實現業務邏輯並把結果顯示在wxml中,昭告天下。如果只是實現一個簡單任務,像計算1+1=2這種,那單個js應該是沒問題的,只是理想很豐滿,現實很骨感,一個小程式應用,往往要實現的功能遠遠不止於如此。

為了提高開發效率,可把一些通用的功能,放在一個通用的js文件里,並放置在utils下。等頁面中的js文件要使用時,用require引入便可。

既然有js可共用,那是否有wxss可供共用?有的,app.wxss文件便是。

const util = require('../../utils/util.js')

Page({

/**

* 頁面的初始數據

*/

data: {

},

/**

* 生命周期函數--監聽頁面載入

*/

onLoad: function (options) {

},

/**

* 生命周期函數--監聽頁面初次渲染完成

*/

onReady: function () {

},

/**

* 生命周期函數--監聽頁面顯示

*/

onShow: function () {

},

/**

* 生命周期函數--監聽頁面隱藏

*/

onHide: function () {

},

/**

* 生命周期函數--監聽頁面卸載

*/

onUnload: function () {

},

/**

* 頁面相關事件處理函數--監聽用戶下拉動作

*/

onPullDownRefresh: function () {

},

/**

* 頁面上拉觸底事件的處理函數

*/

onReachBottom: function () { 

},

/**

* 用戶點擊右上角分享

*/

onShareAppMessage: function () {

}

})

2.3 app.wxss文件

app.wxss文件,為整個應用的樣式配置文件。在這裡配置的樣式,可供所有頁面共用,而且不用任何操作。真好,微信產品經理,總算做了一件讓程式員省心的事了。

一說到省心,你就開心,一開心,便忘乎所以,忘記還有app.js和app.json未被提及。這兩個家伙,可是很重要的角色。

app.js,是一名有著一夫當關萬夫莫開本事的土匪。若要進到頁面,得先過app.js這一關,此路是他開此樹是他栽,要想從此過,脫下褲子來。

就是說,全局的內容,全局變數和全局的業務邏輯,在這裡實現。至於全局的配置,請移步到app.json文件中。

//app.js

App({

onLaunch: function () {

// 展示本地存儲能力

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

logs.unshift(Date.now())

wx.setStorageSync('logs', logs)

},

globalData: {

userInfo: null

}

})

2.4 app.json文件

app.json文件,對整個應用進行配置的配置文件。在這,可配置統一風格的視窗(window)風格,包括頁面的標題欄背景色,標題(這個不太可能),標題顏色;

可配置且必須配置的頁面路徑(pages);可配置全局切換標簽,可配置定位等許可權聲明和授權提示信息,可引入第3方插件。

可,可,可,渴就喝水去。

{

"pages": [

"pages/index/index",

"pages/logs/logs"

],

"window": {

"backgroundTextStyle": "light",

"navigationBarBackgroundColor": "#fff",

"navigationBarTitleText": "WeChat",

"navigationBarTextStyle": "black"

},

"permission": {

"scope.userLocation": {

"desc": "請授予位置服務許可權,以便更好的吃飯"

}

},

"tabBar": {

"borderStyle": "black",

"backgroundColor": "#ffffff",

"color": "#1b1b1b",

"selectedColor": "#2b2b2b",

"list": [

{

"iconPath": "images/about.png",

"selectedIconPath": "images/about_p.png",

"pagePath": "pages/about/index",

"text": "關於"

},

{

"iconPath": "images/my.png",

"selectedIconPath": "images/my_p.png",

"pagePath": "pages/my/index",

"text": "我的"

}

]

},

"sitemapLocation": "sitemap.json"

}

等等,聽我講了大半天,是不是感覺少了點什麼,沒錯,少了給我發紅包了。少了講開發工具生成的源代碼了,少了懟微信產品經理了。

好吧,那我就再懟一句,微信的小程式的產品經理,你們生成的代碼,我看不懂,也不想看,下一節,我就統統把它們刪掉。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如何組合 WHERE 子句以建立功能更強的更高級的搜索條件?如何使用 NOT 和 IN 操作符? 組合 WHERE 子句 第6章中介紹的所有 WHERE 子句在過濾數據時使用的都是單一的條 件。為了進行更強的過濾控制,MySQL允許給出多個 WHERE 子句。這些子 句可以兩種方式使用:以 AND ...
  • 使用 WHERE 子句 資料庫表一般包含大量的數據,很少需要檢索表中所有行。通常只 會根據特定操作或報告的需要提取表數據的子集。只檢索所需數據需要 指定搜索條件(search criteria),搜索條件也稱為過濾條件(filter condition)。 在 SELECT 語句中,數據根據 WHE ...
  • 排序數據 其實,檢索出的數據並不是以純粹的隨機順序顯示的。如果不排 序,數據一般將以它在底層表中出現的順序顯示。這可以是數據最初 添加到表中的順序。但是,如果數據後來進行過更新或刪除,則此順 序將會受到MySQL重用回收存儲空間的影響。因此,如果不明確控 制的話,不能(也不應該)依賴該排序順序。關係 ...
  • SELECT 語句 SQL語句是由簡單的英語單詞構成的。這些單詞稱 為關鍵字,每個SQL語句都是由一個或多個關鍵字構成的。大概,最經常 使用的SQL語句就是 SELECT 語句了。它的用途是從一個或多個表中檢索 信息。 為了使用 SELECT 檢索表數據,必須至少給出兩條信息——想選擇什 麽,以及從 ...
  • 連接 在具有可供使用的MySQL DBMS和客戶機軟體之後,有必要簡要討 論一下如何連接到資料庫。 MySQL與所有客戶機 — 伺服器DBMS一樣,要求在能執行命令之前登 錄到DBMS。登錄名可以與網路登錄名不相同(假定你使用網路)。MySQL 在內部保存自己的用戶列表,並且把每個用戶與各種許可權關聯 ...
  • yarn-site.xml 配置介紹yarn.scheduler.minimum-allocation-mb yarn.scheduler.maximum-allocation-mb說明:單個容器可申請的最小與最大記憶體,應用在運行申請記憶體時不能超過最大值,小於最小值則分配最小值,從這個角度看,最小值 ...
  • 什麼是MySQL MySQL已經存在很久了,它在世界範圍內得到了廣泛的安裝和使用。 為什麼有那麼多的公司和開發人員使用MySQL?以下列出其原因。 成本——MySQL是開放源代碼的,一般可以免費使用(甚至可以 免費修改)。 性能——MySQL執行很快(非常快)。 可信賴——某些非常重要和聲望很高的公 ...
  • 什麼是資料庫 資料庫這個術語的用法很多,但就本書而言,資料庫是一個以某種 有組織的方式存儲的數據集合。理解資料庫的一種最簡單的辦法是將其 想象為一個文件櫃。此文件櫃是一個存放數據的物理位置,不管數據是 什麼以及如何組織的 資料庫(database) 保存有組織的數據的容器(通常是一個文 件或一組文件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...