资讯专栏INFORMATION COLUMN

微信小程序初探

teren / 3162人阅读

摘要:在微信小程序中,要更新视图就只能修改,而视图层也只能通过事件向逻辑层传递交互信息。页面移植到微信小程序要修改的地方也还比较多,主要是标签和的交互及小程序提供的功能部分。

小程序是一种不需要下载安装即可使用的应用,它实现了应用「触手可及」的梦想,用户扫一扫或搜一下即可打开应用。也体现了「用完即走」的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。 ——张小龙

微信小程序框架


微信小程序分为视图层和逻辑层,视图层包含WXML(类似HTML)、WXSS(类似css),逻辑层包含javascript文件。视图层通过事件通知逻辑层,而逻辑层通过控制data来更新视图。此外,微信还提供了API、组件、配置文件,使微信小程序的开发更加简单。

在开发微信小程序时,我们通过网络请求请求数据,对数据进行一定的处理绑定到视图即可,由于组件的存在,简单的展示变得更加简单。涉及网络请求、媒体、文件、缓存、位置、设备、支付、二维码等功能时,都可以去调用相应的API。所以,微信小程序的开发足够简单,可以快速开发并实现。

当然,利弊是共存的,微信小程序开发起来虽然简单,但是限制也较多、灵活性却不足。在微信小程序中,要更新视图就只能修改data,而视图层也只能通过事件向逻辑层传递交互信息。前端传统的Dom操作在微信小程序中是不可用的,因为window、document在微信小程序中都不存在,所以,只要涉及操作Dom的代码均不可复用。微信小程序WXML提供的标签也比HTML要少很多,但是常见的标签都是有的,WXSS支持的样式也比CSS要少一些。如果要将H5页面移植到微信小程序,要修改的地方还比较多:

WXML标签与HTML标签并不一致,要重写;

微信小程序无DOM交互能力,涉及DOM操作的代码需要在小程序中多带带设计;

网络请求、媒体、文件、缓存、界面等相关内容需要使用小程序提供的API来实现,API的使用比较简单;

与上述内容无关的JS逻辑代码是可以复用的;

css代码可复用率高,除了一些复杂的CSS3样式外,基本移植可用。小程序额外提供了flex、rpx的实现,做响应式页面变得更加容易。

综上,微信小程序开发简单,码农们可以快速上手,开发出一个可用的小程序。但是,微信小程序限制也不少,不能操作DOM,支持的HTML标签和CSS样式少一些,做一些炫酷的动画或者复杂的功能就比较困难。H5页面移植到微信小程序要修改的地方也还比较多,主要是WXML标签、JS和HTML的交互及小程序提供的API功能部分。

微信小程序开发姿势

如果你要开始开发一款微信小程序了,那么正确的步骤是什么呢?我也不知道啊。。。以下我的个人推荐步骤:

先了解微信小程序为何而生,从产品的角度去思考微信小程序的利与弊(对于程序员思考为什么小程序要如此设计、为什么里面有各种限制是非常有帮助的),推荐《一篇文章读懂微信小程序(应用号)是什么?》、《你的产品适不适合做微信小程序?》;

整体认识小程序的框架、设计理念、开发的利弊;

通读微信小程序官网;

仔细阅读小程序官网的开发部分(https://mp.weixin.qq.com/debu...,下载微信小程序开发者工具,体验官网提供的Demo;

开始开发微信小程序。

模块化 JavaScript模块化

微信小程序中,JS文件中声明的变量和函数只在该文件中有效;不同的文件可以声明相同名字的变量和函数,不会相互影响。如果需要获取全局的应用实例,可以在App()中设置。

// app.js
App({
  globalData: 1
})

// a.js
// The localValue can only be used in file a.js.
var localValue = "a"
// Get the app instance.
var app = getApp()
// Get the global data and change it.
app.globalData++

此外,可以通过require()引入其他JS文件,在文件中可以通过module.exports来暴露模块接口。

// common.js
function sayHello(name) {
  console.log(`Hello ${name} !`)
}
module.exports.sayHello = sayHello
// index.js
var common = require("common.js")
Page({
  helloMINA: function() {
    common.sayHello("MINA")
  }
})
WXML模块化

WXML可以通过模板(template)来组织标签,使WXML拆分合理、清晰易读。使用template标签来定义模版,使用name属性指定模版名称;通过import标签来引入模版,并使用is属性来指定使用的模版名称,data传入属性。

// template/msgItem.wxml
// index.wxml