通過微信小程式看前端

来源:http://www.cnblogs.com/luozhihao/archive/2016/09/26/5906813.html
-Advertisement-
Play Games

前言 2016年9月22日凌晨,微信官方通過“微信公開課”公眾號發佈了關於微信小程式(微信應用號)的內測通知。整個朋友圈瞬間便像炸開了鍋似的,各種揣測、介紹性文章在一夜裡誕生。而真正收到內測邀請的公眾號據說只有200個。 雖然內測名額十分稀少,但依賴中國廣大開發者的破解和分享精神,在網路上很快出現了 ...


前言

2016年9月22日凌晨,微信官方通過“微信公開課”公眾號發佈了關於微信小程式(微信應用號)的內測通知。整個朋友圈瞬間便像炸開了鍋似的,各種揣測、介紹性文章在一夜裡誕生。而真正收到內測邀請的公眾號據說只有200個。

雖然內測名額十分稀少,但依賴中國廣大開發者的破解和分享精神,在網路上很快出現了開發工具的破解版本和API文檔。然而可能是微信的妥協或者早已預料,9月24日微信官方發佈了不需要破解就可以使用的微信小程式開發者工具和文檔,對於費勁心思破解完的開發者來說應該瞬間整個人都不好了。

以下便是微信提供的開發工具和文檔地址:
https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644087418

作為一名具有極客精神的前端開發者,我也馬上在這股熱潮中試了下水,下載了小程式開發工具。下麵是登陸後的界面:

圖片描述

從整個結構佈局來看這款IDE工具可以分為三個部分,首先左側為導航操作區域,中間是目錄或展示區域,右側為調試區域(很像Chrome的調試工具)。下麵我就以前端的角度分別從代碼角度和巨集觀角度介紹下自己對於微信小程式的看法。

代碼角度

縱觀整個開發文檔,微信小程式的前端技術主要可以分為“框架”、“組件”和“API介面”。

1.框架

微信提供了一套自己的用於開發小程式的前端框架,和目前主流的前端框架相比,其既有類似的地方,也有特殊的地方。

特殊的地方在於其只能在微信小程式開發工具內使用,並做了相對嚴格的使用和配置限制,開發者必須按照其規定的用法來使用。一些外部的框架和插件在小程式里都是無法使用的,同時由於框架並非運行在瀏覽器中,所以 JavaScript 在 web 中一些能力都無法使用,如document,window等。

而相似的地方在於其包含了和其他框架一樣的“邏輯層”和“視圖層”,以數據驅動為主,不操作DOM元素等。下麵以代碼為例子來介紹:

(1)數據綁定

<!--wxml-->
<view> {{message}} </view>
// page.js
Page({
    data: {
      message: 'Hello MINA!'
    }
})

Page() 方法用來註冊一個頁面。接受一個 OBJECT 參數,其指定頁面的初始數據、生命周期函數、事件處理函數等。這乍一看怎麼和目前流行的Vue框架語法十分類似呢,Vue代碼如下:

<view> {{message}} </view>
// page.js
new Vue({
  data: {
    message: 'Hello MINA!'
  }
})

都是雙括弧插值語法,連數據初始化和雙向綁定的格式都一樣,好吧,就當純屬巧合吧。

這裡需要註意的是,微信小程式提供了WXML尾碼的文件類型,其實就是類似XML的標簽語言文件。

(2)列表渲染

<!--wxml-->
<view wx:for="{{array}}"> {{item}} </view>
// page.js
Page({
    data: {
      array: [1, 2, 3, 4, 5]
    }
})

這樣的列表渲染語法相信學過Angular和Vue的同學都比較容易掌握,都是非常的類似,當然還有條件渲染等。

(3)事件綁定

<view bindtap="add"> {{count}} </view>
Page({
    data: {
      count: 1
    },
    add: function(e) {
        this.setData({
            data: this.data.count + 1
        })
    }
})

如果你學過React,那麼其裡面有一個setState的方法可以用來改變狀態的值,這裡的setDate也是一樣的,通過綁定的add方法來改變視圖中count的值。

(4)樣式導入

/** common.wxss **/
.small-p {
    padding:5px;
}
/** app.wxss **/
@import "common.wxss";

.middle-p {
    padding:15px;
}

這裡小程式提供了又一種新的文件尾碼類型WXSS,用於描述WXML的組件樣式,其與CSS文件相比還提供了像SASS和LESS這樣的預編譯語言的樣式導入功能,同時還提供了rpx及rem的單位尺寸功能。

(5)模塊化

// common.js
function sayHello(name) {
    console.log('Hello ' + name + '!')
}
module.exports = {
    sayHello: sayHello
}
var common = require('common.js')
Page({
    helloMINA: function() {
      common.sayHello('MINA')
    }
})

微信小程式秉承了JS模塊化的機制,熟悉Require.js或者Sea.js的同學應該很熟悉,這裡通過module.exports暴露對象,通過require來獲取對象。

2.組件

小程式的組件其實也是框架的一部分,主要負責UI的呈現,也自帶了一些功能與微信風格的樣式。基本上移動端常用的組件都包含在內,比如表單組件、導航組件、媒體組件等。下麵便是小程式提供的八類組件:

圖片描述

對於小程式的組件使用其實不是非常複雜,按照文檔的使用示例便可以輕鬆搞定,詳細地址:https://mp.weixin.qq.com/debug/wxadoc/dev/component/?t=1474644085698

3.API介面

相比微信公眾號的開發,微信小程式向開發者提供了更多的API介面,可以方便的調起微信提供的能力,比如監聽重力感應和羅盤數據、WebSocket連接、支付功能等。下麵以一個發起網路請求的API為例:

wx.request({
    url: 'test.php',
    data: {
        name: 'luozh' ,
        age: 18
    },
    header: {
        'Content-Type': 'application/json'
    },
    success: function(res) {
        console.log("請求成功")
    },
    fail: function() {
        console.log("請求失敗")
    }
})

wx.request發起的是https請求。一個微信小程式,同時只能有5個網路請求連接。關於更多API介面的介紹請查閱官方文檔。

以上便是關於微信小程式前端代碼部分的簡單介紹,相信有一點前端框架使用經驗的同學上手都是相對容易的,下麵將從巨集觀角度講解下我個人認為微信小程式給前端領域的帶來影響。

巨集觀角度

微信小程式一齣來的時候,網上關於其對於前端界的影響層出不窮,更多的文章和評論認為前端又要火了,前端的第二春來了,Javascript和HTML5的新時代來了等。

當然微信小程式的出現確實會給前端帶來一定的推波助瀾的效果,但是任何一件事物的誕生都是利弊並存的,微信小程式也不例外。以下便簡單闡述下我個人的看法:

1.利

(1)提高開發相容性:微信小程式可以說是重新定義了APP,使得一款應用能夠在android、iphone及windows phone中都能運行,對於前端來說實現了“一次編譯,到處運行”的理念。

(2)推動前端技術的發展:微信小程式以其簡單的開發環境,使以Javascript和HTML5為主的前端技術在龐大的微信社交群體內傳播,越來越多的人開始接觸前端,參與到前端編碼和設計中來,為前端技術貢獻力量。

(3)其他...

2.弊

(1)增加前端工作量及學習成本:原本一名前端工程師負責的平臺就很廣泛,包括PC端、移動端、APP應用等,微信小程式的出現會要求前端涉及微信應用的開發,一定程度增加了學習和工作成本。同時企業也會增加這方面的開發和投入成本。

(2)前端競爭日趨明顯:微信小程式的誕生可能又會吸引一批後臺、APP開發等其他領域的人員轉向前端開發,而這些本來就具備較強邏輯思維或者較強感性思維的人將擠掉那些處於前端邊緣的新手,可能使得大部分低水平前端開發者面臨失業或者找不到工作的危險。

(3)其他...

這裡大概介紹了幾點微信小程式給前端帶來的影響,更多的大家可以補充。

總結

本文從代碼角度和巨集觀角度簡單闡述了微信小程式在前端領域的一些內容和影響,希望能夠幫助那些不瞭解微信小程式的開發者很快入門並認識這一新的技術領域。

至於小程式對於前端的影響,反過來我們也可以這樣認為:

技術的發展不是基於一個平臺去改變,而是通過技術去驅動一個平臺改變,正是因為前端的發展才催生了“小程式”的這種可能性…

 

原創文章,轉載請註明來自 勞卜 - 博客園[http://www.cnblogs.com/luozhihao]

本文首發於微信公眾號:前端呼啦圈(Love-FED)

同步發表於:http://www.cnblogs.com/luozhihao/p/5906813.html

      https://segmentfault.com/a/1190000007006479

      http://www.jianshu.com/p/852e6ffb6569


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

-Advertisement-
Play Games
更多相關文章
  • 1. Python 文件I/O 本章只講述所有基本的的I/O函數,更多函數請參考Python標準文檔。 2.列印到屏幕 最簡單的輸出方法是用print語句,你可以給它傳遞零個或多個用逗號隔開的表達式。此函數把你傳遞的表達式轉換成一個字元串表達式,並將結果寫到標準輸出如下: 示例1: 運行示例1結果如 ...
  • 【應用場景】:熱門標簽、推薦 【特點】: 在佈局內,隨意擺放任意個view,每行所擺放的view個數,根據實施計算出來的寬度,一旦當前要擺放的view寬度和之前擺放的所有view寬度加在一起,超過了佈局的寬度,那麼就把該view換行擺放。 【佈局】: <LinearLayout xmlns:andr ...
  • maven作為一個項目構建工具,在開發的過程中很受歡迎,可以幫助管理項目中的bao依賴問題,另外它的很多功能都極大的減少了開發的難度,下麵來介紹maven的安裝及與eclipse的集成。 maven的官網地址為:http://maven.apache.org/,打開網頁之後,看到最新的版本是3.3. ...
  • chunkupload簡介 chunkupload是一款基於java語言的斷點續傳組件,針對文件上傳,非文件下載,集成方便,使用簡單。 從整體上講,chunkupload會對文件進行切片處理,每個切片4M大小,預設情況下,chunkupload不會對切片進行合併,筆者也不建議在上傳文件時對切片進行合 ...
  • 時間複雜度O(n)當n比較大時歐拉篩法所用的時間比O(nloglogn)的演算法的時間少的會越來越明顯 為什麼呢? 因為在歐拉篩法中,每一個合數只被訪問並將其所對的f[]的值修改了一次。 ...
  • #include <stdio.h>main(){ int x; printf("請輸入要排序數字個數:"); scanf("%d",&x); int i,j,k,a,b,num[x]; printf("輸入數據:"); for(i=0;i<x;i++) scanf("%d",&num[i]); f ...
  • 1.Quartz 是用來完成任務調度的。 2.Quartz 的三個核心概念:調度器、任務、觸發器。 (1)Job:通過實現該介面來定義需要執行的任務。 (2)JobDetail:Quartz 在每次執行 Job 時,都重新創建一個 Job 實例,所以它不是直接接受一個 Job 的實例,而是接受 Jo ...
  • The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5451 Accepted Submis ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...