微信小程序用什么语言是什么 微信小程序用什么语言有什么用

微信小程序 框架详解及实例应用
作者:流云诸葛
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了微信小程序 框架详解及实例应用的相关资料,需要的朋友可以参考下
快速了解微信小程序的使用,一个根据小程序的框架开发的todos app
微信官方已经开放微信小程序的官方文档和开发者工具。前两天都是在看相关的新闻来了解小程序该如何开发,这两天官方的文档出来之后,赶紧翻看了几眼,重点了解了一下文档中框架与组件这两个部分,然后根据简易教程,做了一个常规的todo app。这个app基于微信小程序的平台,实现了todo app的常规功能,同时为了让它更接近实际的工作场景,也用到了loading与toast这两个组件来完成一些操作的交互与反馈。这个平台给我的直观感受是,技术层面,它跟vue有相似性,但是远没有vue强大;开发时候的思路,不像vue,反倒觉得比较像backbone。所以要是使用过backbone,vue等mvc,mvvm框架的人,会觉得这个平台上手很容易。本文主要介绍这个todo app实现的一些要点。
先补充下本文相关的资料:
官方文档:
官方开发者工具下载:
本文todo app的功能演示:
注:需长按todo的text,才能直接编辑。因为是在手机端,所以不能使用双击事件来进行编辑,改成了长按事件。小程序的平台也没有提供双击事件的绑定。
相关源码:
如果你想在本地运行这个项目,需要先安装开发者工具,按照文档中简易教程的描述,先建好一个项目;
建完之后,开发者工具就会打开这个项目;
接着在磁盘上,找到建好的项目的文件夹,把里面的内容都删掉,把上面源码文件夹下的文件都粘贴进去;
然后重新打开开发者工具,先进入到编辑页签,然后点击编译按钮,就会直接进入到调试界面,查看app的功能:
下面来介绍下这个app开发的要点:
1. 这个app的目录结构以及配置等就不详细介绍了,这些在文档-框架部分都有很详细的描述。这个平台里面没有html和css,取而代之的是wxml和wxss。wxss跟css几乎没有区别,缺点就是不如css强大,支持的选择器有限。但是好处是由于只有微信这一个平台,所以几乎没有兼容性问题,能够使用标准的,更新的css技术。wxml里面只能用平台提供的那些组件的标签,html的标签不能直接用,各个组件的在wxml的使用方式,都可以在文档-组件这一部分找到说明的示例。所以实际上wxml跟wxss编写起来都没有什么难题。
2. wxml支持以下这些特性:
在todo app里面除了模板和引用没有用到之外,其它的都使用到了,不过没有使用到每个特性的各个细节,只根据app的需要选用合适的功能。前几天看到有文章说,微信小程序可能是基于vue框架来实现的,所以就看了下vue的文档。对于数据绑定,条件渲染,列表渲染,事件这几部分都详细看了vue的用法。对比下来,wxml提供的这些特性,跟vue的相关特性是还比较像,不过功能并没有那么多,所以也不能轻易地直接拿vue框架的特性用到小程序里面。最佳实践,还是基于官方文档中提供的说明来,如果官方文档中没有提到的功能,通过猜测的方式去用,肯定是行不通的。我通过打印的方式,查看一些对象的原型,也并没有发现比官方文档要多的一些实例方法,说明小程序的框架功能确实是有限的。
3. wxss其实是可以用less或者sass来写的,只要选择器满足框架的要求即可。由于时间原因,就没有在这个app里面去尝试了。
4. 没有双向绑定。在vue里面,一个vue实例就是一个view-model;view层对数据的更新,会实时反馈到model;model的更新,也会实时反馈的到view。在小程序里面,没有双向绑定,view的更新不会直接同步到model;需要在相关事件回调里面,直接从view层拿到数据,然后通过setData的方式,更新model,小程序内部会在setData之后重新渲染page。比如单个todo项,toggle的操作:
toggleTodo: function( e ) {
var id = this.getTodoId( e, 'todo-item-chk-' );
var value = e.detail.value[ 0 ];
var complete = !!
var todo = this.getTodo( id );
this.updateData( true );
this.updateStorage();
以上代码中,通过e.detail.value[0]拿到单个todo项里面checkbox的值,通过该值来判断todo的complete状态。最后在updateData的内部,还会通过setData方法,刷新model的内容。只有这样,在toggle操作之后,app底部的统计信息才会更新。
5. 事件绑定的时候,无法传递参数,只能传递一个event。比如上面那个toggle的操作,我其实很想在回调里面把当前todo的id传到这个回调里面,但是想尽办法都做不到,最后只能通过id的方式来处理:就是在wxml中绑定事件的组件上面,加一个id,这个id全page也不能重复,所以id得加前缀,然后在id最后加上todo的id值;当事件触发的时候,通过e.currentTarget.id就能拿到该组件的id,去掉相应的id前缀,就得到todo的id值了。这是目前用到的一个方法,我认为不是很优雅,希望后面能发现更好的办法来实现。
6. app中考虑到了loading的效果,要利用button组件的loading属性来实现。但是loading仅仅是一个样式的控制,它不会控制这个按钮是否能重复点击。所以还要利用buttong的disabled属性,防止重复点击。
剩下的实现细节,都在下面两个文件的源码中,欢迎大家指出其中的问题。
index.wxml的源码:
&!--list.wxml--&
&view class="container"&
&view class="app-hd"&
&view class="fx1"&
&input class="new-todo-input" value="{{newTodoText}}" auto-focus bindinput="newTodoTextInput"/&
&button type="primary" size="mini" bindtap="addOne" loading="{{addOneLoading}}" disabled="{{addOneLoading}}"&
&view class="todos-list" &
&view class="todo-item {{index == 0 ? '' : 'todo-item-not-first'}} {{plete ? 'todo-item-complete' : ''}}" wx:for="{{todos}}" wx:for-item="todo"&
&view wx-if="{{!todo.editing}}"&
&checkbox-group id="todo-item-chk-{{todo.id}}" bindchange="toggleTodo"&
&label class="checkbox"&
&checkbox value="1" checked="{{plete}}"/&
&/checkbox-group&
&view id="todo-item-txt-{{todo.id}}" class="todo-text" wx-if="{{!todo.editing}}" bindlongtap="startEdit"&
&text&{{todo.text}}&/text&
&view wx-if="{{!todo.editing}}"&
&button id="btn-del-item-{{todo.id}}" bindtap="clearSingle" type="warn" size="mini" loading="{{todo.loading}}" disabled="{{todo.loading}}"&
&input id="todo-item-edit-{{todo.id}}" class="todo-text-input" value="{{todo.text}}" auto-focus bindblur="endEditTodo" wx-if="{{todo.editing}}"/&
&view class="app-ft" wx:if="{{todos.length & 0}}"&
&view class="fx1"&
&checkbox-group bindchange="toggleAll"&
&label class="checkbox"&
&checkbox value="1" checked="{{todosOfUncomplted.length == 0}}"/&
&/checkbox-group&
&text&{{todosOfUncomplted.length}} left.&/text&
&view wx:if="{{todosOfComplted.length & 0}}"&
&button type="warn" size="mini" bindtap="clearAll" loading="{{clearAllLoading}}" disabled="{{clearAllLoading}}"&
Clear {{todosOfComplted.length}} of done.
&loading hidden="{{loadingHidden}}" bindchange="loadingChange"&
{{loadingText}}
&/loading&
&toast hidden="{{toastHidden}}" bindchange="toastChange"&
{{toastText}}
index.js的源码:
var app = getApp();
todos: [],
todosOfUncomplted: [],
todosOfComplted: [],
newTodoText: '',
addOneLoading: false,
loadingHidden: true,
loadingText: '',
toastHidden: true,
toastText: '',
clearAllLoading: false
updateData: function( resetTodos ) {
var data = {};
if( resetTodos ) {
data.todos = this.data.
data.todosOfUncomplted = this.data.todos.filter( function( t ) {
return !t.
data.todosOfComplted = this.data.todos.filter( function( t ) {
this.setData( data );
updateStorage: function() {
var storage = [];
this.data.todos.forEach( function( t ) {
storage.push( {
text: t.text,
complete: t.complete
wx.setStorageSync( 'todos', storage );
onLoad: function() {
this.setData( {
todos: wx.getStorageSync( 'todos' ) || []
this.updateData( false );
getTodo: function( id ) {
return this.data.todos.filter( function( t ) {
return id == t.
getTodoId: function( e, prefix ) {
return e.currentTarget.id.substring( prefix.length );
toggleTodo: function( e ) {
var id = this.getTodoId( e, 'todo-item-chk-' );
var value = e.detail.value[ 0 ];
var complete = !!
var todo = this.getTodo( id );
this.updateData( true );
this.updateStorage();
toggleAll: function( e ) {
var value = e.detail.value[ 0 ];
var complete = !!
this.data.todos.forEach( function( t ) {
t.complete =
this.updateData( true );
this.updateStorage();
clearTodo: function( id ) {
var targetI
this.data.todos.forEach( function( t, i ) {
if( targetIndex !== undefined )
if( t.id == id ) {
targetIndex =
this.data.todos.splice( targetIndex, 1 );
clearSingle: function( e ) {
var id = this.getTodoId( e, 'btn-del-item-' );
var todo = this.getTodo( id );
todo.loading =
this.updateData( true );
var that =
setTimeout( function() {
that.clearTodo( id );
that.updateData( true );
that.updateStorage();
clearAll: function() {
this.setData( {
clearAllLoading: true
var that =
setTimeout( function() {
that.data.todosOfComplted.forEach( function( t ) {
that.clearTodo( t.id );
that.setData( {
clearAllLoading: false
that.updateData( true );
that.updateStorage();
that.setData( {
toastHidden: false,
toastText: 'Success'
startEdit: function( e ) {
var id = this.getTodoId( e, 'todo-item-txt-' );
var todo = this.getTodo( id );
todo.editing =
this.updateData( true );
this.updateStorage();
newTodoTextInput: function( e ) {
this.setData( {
newTodoText: e.detail.value
endEditTodo: function( e ) {
var id = this.getTodoId( e, 'todo-item-edit-' );
var todo = this.getTodo( id );
todo.editing =
todo.text = e.detail.
this.updateData( true );
this.updateStorage();
addOne: function( e ) {
if( !this.data.newTodoText )
this.setData( {
addOneLoading: true
//open loading
this.setData( {
loadingHidden: false,
loadingText: 'Waiting...'
var that =
setTimeout( function() {
//close loading and toggle button loading status
that.setData( {
loadingHidden: true,
addOneLoading: false,
loadingText: ''
that.data.todos.push( {
id: app.getId(),
text: that.data.newTodoText,
compelte: false
that.setData( {
newTodoText: ''
that.updateData( true );
that.updateStorage();
loadingChange: function() {
this.setData( {
loadingHidden: true,
loadingText: ''
toastChange: function() {
this.setData( {
toastHidden: true,
toastText: ''
最后需要补充的是,这个app在有限的时间内依据微信的官方文档进行开发,所以这里面的实现方式到底是不是合理的,我也不清楚。我也仅仅是通过这个app来了解小程序这个平台的用法。希望微信官方能够推出一些更全面、最好是项目性的demo,在代码层面,给我们这些开发者提供一个最佳实践规范。欢迎有其它的开发思路的朋友,帮我指出我以上实现中的问题。
通过此文,希望大家了解微信小程序的框架,谢谢大家对本站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具小程序_百度百科
小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。日,2016公开课PRO版在广州举行,“微信之父”首次公开演讲,宣布将推出“应用号”,通过公众号完成一些App的部分功能[1]
。日晚间微信官方向部分公众号发出了应用号的内测邀请,日凌晨微信正式对外声明已经开始内测。[2]
微信的名字里面有个“微”,但是如今微信已经是国内最拿得出手的移动互联网产品,这个产品让腾讯拿到了移动互联网的船票,地位不可谓不卓然。9月21日,微信推出“小程序”的内测,虽然名字里面有个“小”,但是这个功能推出的重要性,可能不会比微信 4.0 里面的朋友圈和微信 5.0 里面的微信支付低。
小程序消息背景
日,微信之父张小龙时隔多年的公开亮相,解读了微信的四大价值观。
小程序透露内情
提前透露:新的公众号形态「应用号」或将推出
张小龙指出,越来越多产品通过公众号来做,因为这里开发、获取用户和传播成本更低。拆分出来的服务号并没有提供更好的服务,所以微信内部正在研究新的形态,叫「应用号」。
小程序功能用处
很多用户在微信里买火车票、电影票,并不需要专门安装 App。未来用户关注了「应用号」,就像关注了 App 一样,这个号不会下发内容,很安静地存在微信里,只提供功能性服务。[3]
应用号以“微信公众平台小程序”的名义进行内测发布,核心功能是提供一些本地的API供H5上面的js调用,以此提升微信上H5应用的流畅度。第一批应用号内测只邀请了200个微信公众号,还想收到邀请的公众号需等待下一批。[2]
小程序内测消息
小程序服务与支撑
从内测信息来看,小程序在通过向开发者开放多种服务及支撑能力以实现以上设想,主要面向开发者,这些服务和支撑能力包括:
视图容器:视图(View)、滚动视图、Swiper
基础内容:图标、文本、进度条
表单组件:按钮、表单等等
媒体组件:音频、图片、视频
地图位置服务
文件操作能力
网络:上传下载能力、WebSocket
数据:数据缓存能力
位置:获取位置、查看位置
设备:网络状态、系统信息、重力感应、罗盘
界面:设置导航条、导航、动画、绘图等等
开放接口:登录,包括签名加密,用户信息、微信支付、模板消息
小程序文档与程序
近期,微信公众平台推出新的能力,可以开发一个微信小程序,并且正在小范围的邀请内测,为了让更多开发者了解平台新能力,现提供如下文档和工具:
1. 小程序开发文档
2. 小程序设计指南
3. 小程序开发者工具
尚未获得内测邀请的开发者,可以先通过以上文档,了解微信公众平台提供的新能力,并且可以使用我们提供的开发者工具开发小程序和模拟运行效果。[4]
小程序问题解答
Q:小程序是什么?它有着什么样的功能?
A:小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。
Q:我是一个开发者,目前没有收到小程序的测试邀请,有什么渠道可以申请注册小程序?
A:目前,小程序仍然处于内测阶段。全面开放申请后,主体类型为个人、企业、政府、媒体或其他组织的开发者,均可申请注册小程序。
Q:现在已经有部分帐号收到小程序的内测邀请了,接下来是否会继续开放内测邀请?
A:关于小程序的上线节奏:本次内测采用邀请制,其内容客户端暂时对用户不可见。之后小程序会全面开放申请,所有小程序将在统一时间向用户开放。
Q:小程序可以和现有的App 打通吗?
A:小程序可以借助微信联合登录,和开发者已有的App 后台的用户数据进行打通,但不会支持小程序和App 直接的跳转。
Q:微信已经有了订阅号、服务号、企业号,小程序和这三者有什么不同?
A:小程序、订阅号、服务号、企业号目前是并行的体系。
Q:外界有说法称,小程序的推出意味着微信要做一个应用分发市场,是这样吗?
A:微信推出小程序,并非想要做应用分发市场,而是给一些优质服务提供一个开放的平台。[2]
.新华网.[引用日期]
.凤凰科技[引用日期]
.网易[引用日期]
.微信公众平台[引用日期]
企业信用信息微信“小程序”再一次改变世界? | 新榜独家--百度百家
微信“小程序”再一次改变世界? | 新榜独家
分享到微信朋友圈
技术创业的时代可能要来了,但窗口期不会太长
人们讨论已久的应用号昨晚终于问世,不过正式的称呼叫“小程序”。在我们还没见到小程序长什么样子的时候,首例小程序相关交易已经基本完成,300万元买的是一个走上人生颠覆的机会,还是只是一个尝鲜的机会?
“微信是一个操作系统”,诚如冯大辉所言,不过,这个判断应该是将来时,微信正在成为、将要成为、梦想成为一个操作系统,但目前还不是。小程序的尝试,就是实现这个梦想的里程碑,微信要建立自己的AppStore,成为更多服务的中央枢纽。
在微信成为一个操作系统的过程中,将出现怎样的机会,才是小程序备受关注的原因,也是300万元赌注背后的深层思考。小程序真的会成就微信生态创业的第二春吗?也许需要保持谨慎乐观。
300万元收购一个小程序值不值?
今天上午,某互联网从业者在朋友圈发布一条消息,要把自己手头一个收到小程序内测邀请的公众号连同公司整体打包卖掉,起拍价300万元。有图有真相:
准确地说,交易对象是一个公司,下面有20几个公众号,其中最大的账号有30多万女性粉丝,其它号加起来也有10多万粉丝。但交易的核心,无疑是那个小程序的内测邀请。据腾讯科技报道,首批内测邀请名额只有200个。所谓奇货可居。
新榜在第一时间联系了要出售邀请的当事人,据悉,这笔交易已经基本完成,买家是一个不愿透露姓名的游戏公司。
至于为什么不自己做,当事人意思是,一方面是拿小程序能做什么没想明白;另一方面,对小程序的前景也没想明白,或许也是“昙花一现”。
在某种程度上,300万元是创业者对小程序期望值的定价。从今年1月份张小龙在微信公开课上透露风声之后到现在内测推出,几个月时间的种种猜想和舆论推动,昨晚消息曝出短短几个小时全网刷屏,业内已经等了太久。
小程序并不是一个全新的东西
虽然从昨晚开始,广大从业者对小程序的内测消息的反应简直可以用山呼海啸、奔走相告来形容,一夕之间,数十篇解读文章抛出,但从技术层面来讲,小程序并不是一个全新的东西。
从目前获知的信息来看,小程序作为微信公众平台一种新的产品形态,它用了类似于JS-SDK的框架,通过提供一系列的接口、组件等开发工具,帮助开发者做出一些具备简单功能的小应用,以替代过去为了一个功能而不得不开发一整套App的窘境。
公众号“乱槽之巅”写道:“从技术角度上来讲,这并非是什么改变世界的创新,在很久以前,有个东西叫做&Weight(作者应该是笔误,此处应该是指widget),再后来,还有个东西叫浏览器插件,再再后来,Facebook之类的开放平台,用的都是类似的技术。而在移动端,PhoneGap 之类的工具也早就提供了用HTML5实现App的能力。唯一令人激动的是,今天做这件事情的是一个拥有几亿用户量的超级应用。”
在张小龙公布开发小程序想法伊始,就有很多文章以“掐死App”这样耸人听闻的标题吸引眼球。但据专业人士的普遍看法,小程序对独立App的取代是有限的。
一方面,小程序在体验上仍然无法媲美原生应用,尤其是牵涉到比较复杂功能和权限的应用。
另一方面,微信的开放必然是有限的,个体层面的真实用户数据恐怕仍然难以开放给小程序,就像目前的订阅号和服务号一样,即使你有100万粉丝,也只能大概知道他们的性别、地域、使用设备分布这些粗略的信息。
小程序备受关注的原因,是因为有订阅号掀起的内容创业浪潮在先。从日微信公众平台推出之后,四年间,难以计数的千万、甚至亿万富翁在此平台上涌现,很多人获得了做梦都想不到的屌丝逆袭机会。作为微信公众平台上的新成员,小程序自然从出生就被赋予了同样的期待。
对于更多还在奋斗途中的创业者而言,过分关注哪些独立App会死掉,明显偏离焦点,我们更应该关注的是小程序将在哪些领域造就一波机会。“三节课”将所有应用,根据是否刚需及使用频次,划分在四个象限:
最好的机会在第二象限,刚需但低频。在1月份的微信公开课上,张小龙举的例子是买火车票,你可以认为12306就是小程序要取代的第一个目标。当然这个象限包含的领域非常广泛,包括医疗、家政、票务、旅游、招聘等等,也蕴含着大量的创业机会。
在小程序问世之前,魏武挥曾经写过一篇文章猜想它将带来的影响,在文章的最后,魏武挥认为在内容创业之后,这或将带来一个“技术创业的时代”。
内容创业的逻辑是否能在小程序上重演?
订阅号的繁荣源于几个基本的事实。
第一,微信公众平台提供了一整套简单易用的编辑、发布和用户管理工具,降低了内容的生产和发行成本;
第二,微信上有海量的用户,有朋友圈,有社交关系链,这降低了内容传播和用户获取成本;
第三,被很多人忽视的一点是公众号运营者拥有极高的自主权,在法律和规则框架内,发布内容是不受平台干扰的,因而广告就成为一个快速且高效的盈利途径,吸引更多人力和资本进入。
生产工具的下放,社交网络的链式传播,利益的驱使,成为一个完美的闭环,在微信平台上生长出数十个估值上亿元的项目。
不过,作为工科生,张小龙更偏爱工具,因为工具既是可控的,又包含了很多可能性。这也是在服务号之后,小程序问世的重要原因,服务号已经被证明为不成功。张小龙要用工具让微信连接万物,而这个野心,又必须借助无数开发者的努力才能实现。
小程序可能带来的机会,对于很多技术开发者无疑是利好消息。
首先,微信小程序开发有很大的想象空间。随着微信提供的工具越来越丰富、越来越完善,除了查天气、查违章这些基础功能,很可能会有一批给我们带来惊喜的小程序。
其次,提供了一套基础工具之后,很多原来停留在想法阶段的创意得以低成本的实现。对于资源有限的创业者来说,利用小程序开发MVP(最小可行性产品)测试,可以迅速试错。甚至像很多内容创业一样,从业余时间玩玩而已到最后成为估值上亿的项目。
最后,不得不说的仍然是微信的海量用户,没有任何一个其它平台可以匹敌。无需单独下载,无需另外注册,一键关注即可,无疑大大降低了用户的使用和获取门槛。
当然,这是事情好的一面,但坏的一面在于,在万众瞩目中降生的小程序,已经没有了订阅号当初自然生长的大环境。
小程序创业的窗口期可能只有一年
回到文章开头,花300万元买一个小程序邀请资格的是一家游戏公司。在这个简单的事实中,我们已经可以看到资本的虎视眈眈。
微信公众号日上线,但到第三年,才出现资本大量涌入的情况。虽然我们习惯性地将新媒体野蛮生长挂在嘴边,但订阅号的繁荣仍然符合互联网产品的生长规律。在两三年间,微信从一个用户不到两亿的新兴产品,成长为月活用户高达8亿的现象级国民应用,公众号的发展与平台是步调一致的。
但小程序从问世,一切都是准备好的。用户准备好了,创业者准备好了,资本也准备好了。在各方都想分一杯羹的情况下,小程序将会被迅速催熟,可能在全面开放后不到一年的时间里,我们就会发现多如牛毛的小程序渗入生活和工作的方方面面。
▲&爱范儿旗下玩物志仅花一个上午就做出了一个电商属性的小程序
在这场技术创业浪潮中,时间的争夺变得更加紧迫,产品开发门槛已经极低,所以用户获取的速度就将成为决定胜负的关键。就像互联网领域屡屡上演的赢者通吃一样,谁成为市场第一,谁就是最后的赢家。也许最后又变成一场资本在背后推动的推广游戏,而微信生态内已经不低的用户获取成本或将被推向一个新的高度。
从某种程度上说,订阅号造就的屌丝逆袭神话,在小程序这波浪潮中,可能不会再发生。
应用号/小程序背后的小故事:
1、首批内测邀请名额只有200个,只向服务号开放,据说还要签保密协议;
2、之所以没叫应用号,据说是因为苹果审核不通过;
3、几年前就被注册了,域名昨天也被注册了;
4、据说每个人只能关注20个小程序,不能像关注订阅号和服务号那样任性了;
5、据说微信与苹果达成协议,小程序既不能做直播,也不能做游戏。
- The End -
阅读:1035
分享到微信朋友圈
在手机阅读、分享本文
还可以输入250个字
推荐文章RECOMMEND
阅读:8221
热门文章HOT NEWS
昨日晚,因《大众电影》百花奖把最佳男配角颁给了李易峰,一时间,...
百度新闻客户端
百度新闻客户端
百度新闻客户端
扫描二维码下载
订阅 "百家" 频道
观看更多百家精彩新闻

我要回帖

更多关于 微信小程序是什么 的文章

 

随机推荐