欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

首个微信小程序开发教程,通宵吐血写的!(它就是第一弹 微信小程序开发教程(第1弹))微信小程序开发教程(第2弹)微信小程序开发教程(第3弹)微信小程序开发教程(第4弹)微信小程序开发教程(第5弹) 有大用

首个微信小程序开发教程,通宵吐血写的! 

微信小程序开发教程(第1弹)

微信应用号(小程序,「应用号」的新称呼)终于来了!

目前还处于内测阶段,微信只邀请了部分企业参与封测。想必大家都关心「小程序」的最终形态到底是什么样子?怎样将一个「服务号」改造成为「小程序」?

我们暂时以一款简单的第三方工具的实例,来演示一下开发过程吧——

序言

开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南)

本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果。这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开的页面中查看当前小程序的启动日志。

1. 获取微信小程序的 AppID

首先,我们需要拥有一个帐号,如果你能看到该文档,我们应当已经邀请并为你创建好一个帐号。注意不可直接使用服务号或订阅号的 AppID。 利用提供的帐号,登录 https://mp.weixin.qq.com ,就可以在网站的「设置」-「开发者设置」中,查看到微信小程序的 AppID 了。

注意:如果我们不是用注册时绑定的管理员微信号,在手机上体验该小程序。那么我们还需要操作「绑定开发者」。即在「用户身份 – 开发者」模块,绑定上需要体验该小程序的微信号。本教程默认注册帐号、体验都是使用管理员微信号。

2. 创建项目

我们需要通过开发者工具,来完成小程序创建和代码编辑。

开发者工具安装完成后,打开并使用微信扫码登录。选择创建「项目」,填入上文获取到的 AppID,设置一个本地项目的名称(非小程序名称),比如「我的第一个项目」,并选择一个本地的文件夹作为代码存储的目录,点击「新建项目」就可以了。

为方便初学者了解微信小程序的基本代码结构,在创建过程中,如果选择的本地文件夹是个空文件夹,开发者工具会提示,是否需要创建一个 quick start 项目。选择「是」,开发者工具会帮助我们在开发目录里生成一个简单的 demo。

项目创建成功后,我们就可以点击该项目,进入并看到完整的开发者工具界面,点击左侧导航,在「编辑」里可以查看和编辑我们的代码,在「调试」里可以测试代码并模拟小程序在微信客户端效果,在「项目」里可以发送到手机里预览实际效果。

3. 编写代码

点击开发者工具左侧导航的「编辑」,我们可以看到这个项目,已经初始化并包含了一些简单的代码文件。最关键也是必不可少的,是 app.js、app.json、app.wxss 这三个。其中,.js 后缀的是脚本文件,.json 后缀的文件是配置文件,.wxss 后缀的是样式表文件。微信小程序会读取这些文件,并生成小程序实例。

下面我们简单了解这三个文件的功能,方便修改以及从头开发自己的微信小程序。

app.js 是小程序的脚本代码。我们可以在这个文件中监听并处理小程序的生命周期函数、声明全局变量。调用 MINA 提供的丰富的 API,如本例的同步存储及同步读取本地数据。

app.json 是对整个小程序的全局配置。我们可以在这个文件中配置小程序是由哪些页面组成,配置小程序的窗口  背景色,配置导航条样式,配置默认标题。注意该文件不可添加任何注释。

app.wxss 是整个小程序的公共样式表。我们可以在页面组件的 class 属性上直接使用 app.wxss 中声明的样式规则。

3. 创建页面

在这个教程里,我们有两个页面,index 页面和 logs 页面,即欢迎页和小程序启动日志的展示页,他们都在 pages 目录下。微信小程序中的每一个页面的【路径 + 页面名】都需要写在 app.json 的 pages 中,且 pages 中的第一个页面是小程序的首页。

每一个小程序页面是由同路径下同名的四个不同后缀文件的组成,如:index.js、index.wxml、index.wxss、index.json。.js 后缀的文件是脚本文件,.json 后缀的文件是配置文件,.wxss 后缀的是样式表文件,.wxml 后缀的文件是页面结构文件。

index.wxml 是页面的结构文件:

本例中使用了<view/><image/><text/>来搭建页面结构,绑定数据和交互处理函数。

index.js 是页面的脚本文件,在这个文件中我们可以监听并处理页面的生命周期函数、获取小程序实例,声明并处理数据,响应页面交互事件等。

index.wxss 是页面的样式表:

页面的样式表是非必要的。当有页面样式表时,页面的样式表中的样式规则会层叠覆盖 app.wxss 中的样式规则。如果不指定页面的样式表,也可以在页面的结构文件中直接使用 app.wxss 中指定的样式规则。

index.json 是页面的配置文件:

页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖 app.json 的 window 中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用 app.json 中的默认配置。

logs 的页面结构

 

logs 页面使用 控制标签来组织代码,在 上使用 wx:for-items 绑定 logs 数据,并将 logs 数据循环展开节点

运行结果如下:

4. 手机预览

开发者工具左侧菜单栏选择「项目」,点击「预览」,扫码后即可在微信客户端中体验。

目前,预览和上传功能尚无法实现,需要等待微信官方的下一步更新。

如你所见,微信官方给出的开发指南还非常简单,很多细节、代码和功能都没有明确的展示,所以接下来就到博卡君展示实力的时候啦!开发教程正式开始!

第一章:准备工作

做好准备工作很重要。开发一个微信应用号,你需要提前到微信的官方网站(weixin.qq.com)下载开发者工具。

1. 下载最新微信开发者工具,打开后你会看到该界面:

2. 点击「新建 web+」项目,随后出现如下画面:

3. 该页面内的各项内容需要注意——

  • AppID:依照官方解释来填。
  • Appname: 项目最外层文件夹名称,如你将其命名为「ABC」,则之后的全部项目内容均将保存在「/ABC/…」目录下。
  • 本地开发目录:项目存放在本地的目录。

注:再次强调,如果你和团队成员共同开发该项目,则建议你们使用同样的目录名称及本地目录,以确保协同开发的统一性。如果你之前已有项目,则导入过程与以上内容近似,不再赘述。

4. 准备工作全部完成后,点击「新建项目」按钮,弹出框点「确定」。

5. 如上图所示,此刻,微信开发者工具已经为你自动构建了一个初始的 demo 项目,该项目内包含了一个微信应用项目所需具备的基本内容和框架结构。点击项目名称(图中即「cards」)进入该项目,就能看到整个项目的基本架构了:

第二章:项目构架

微信目前用户群体非常庞大,微信推出公众号以后,火爆程度大家都看得到,也同样推动着 h5 的高速发展,随着公众号业务的需求越来越复杂,应用号现在的到来也是恰到好处。我们团队具体看了一两次文档后发现,它提供给开发者的方式也在发生全面的改变,从操作 DOM 转为操作数据,基于微信提供的一个过桥工具实现很多 h5 在公众号很难实现的功能,有点类似于 hybrid 开发,不同于 hybrid 开发的方式是:微信开放的接口更为严谨,结构必须采用他提供给我们的组件,外部的框架和插件都不能在这里使用上,让开发者完全脱离操作 DOM,开发思想转变很大。

工欲善其事,必先利其器。理解它的核心功能非常重要,先了解它的整个运作流程。

生命周期:

在index.js里面:

开发者工具上 Console 可以看到:

在首页 console 可以看出顺序是 App Launch–>App Show–>onload–>onShow–>onReady。

首先是整个 app 的启动与显示,app 的启动在 app.js 里面可以配置,其次再进入到各个页面的加载显示等等。

可以想象到这里可以处理很多东西了,如加载框之类的都可以实现等等。

路由:

路由在项目开发中一直是个核心点,在这里其实微信对路由的介绍很少,可见微信在路由方面经过很好的封装,也提供三个跳转方法。

wx.navigateTo(OBJECT):保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面。

wx.redirectTo(OBJECT):关闭当前页面,跳转到应用内的某个页面。

wx.navigateBack():关闭当前页面,回退前一页面。

这三个基本上使用足够,在路由方面微信封装的很好,开发者根本不用去配置路由,往往很多框架在路由方面配置很繁琐。

组件:

此次微信在组件提供方面也是非常全面,基本上满足项目需求,故而开发速度非常快,开发前可以认真浏览几次,开发效率会很好。

其它:

任何外部框架以及插件基本上无法使用,就算原生的 js 插件也很难使用,因为以前我们的 js 插件也基本上全部是一操作 dom 的形式存在,而微信应用号此次的架构是不允许操作任何 dom,就连以前我们习惯使用的动态设置的rem.js也是不支持的。

此次微信还提供了 WebSocket,就可以直接利用它做聊天,可以开发的空间非常大。

跟公众号对比我们发现,开发应用号组件化,结构化,多样化。新大陆总是充满着惊喜,更多的彩蛋等着大家来发现。

接下来开始搞一些简单的代码了!

1. 找到项目文件夹,导入你的编辑器里面。在这里,我使用了 Sublime Text 编辑器。你可以根据自己的开发习惯选择自己喜欢的编辑器。

2. 接下来,你需要根据自己的项目内容调整项目结构。在范例项目中,「card_course」目录下面主要包含了「tabBar」页面以及该应用的一些配置文件。

3. 示例项目的「tabBar」是五个菜单按钮:

4. 找到「app.json」文件,用来配置这个五个菜单。在代码行中找到「”tabBar”」:

你可以根据实际项目需求更改,其中:

  • 「Color」是底部字体颜色,「selectedColor」是切换到该页面高亮颜色,「borderStyle」是切换菜单上面的一条线的颜色,「backgroundColor」是底部菜单栏背景颜色。文字描述较为抽象,建议你一一调试并查看其效果,加深印象。
  • 「“list”」下的代码顺序必须依次放置,不能随便更改。
  • 「”pagePath”」之后的文件名内,「.wxml」后缀被隐藏起来了,这是微信开发代码中人性化的一点——帮你节约写代码的时间,无须频繁声明文件后缀。
  • 「”iconPath”」为未获得显示页面的图标路径,这两个路径可以直接是网络图标。
  • 「”selectedIconPath”」为当前显示页面高亮图标路径,可以去掉,去掉之后会默认显示为「”iconPath”」的图标。
  • 「”Text”」为页面标题,也可以去掉,去掉之后纯显示图标,如只去掉其中一个,该位置会被占用。

注意:微信的底部菜单最多支持五栏(五个 icons),所以在你设计微信应用的 UI 和基本架构时就要预先考虑好菜单栏的排布。

5. 根据以上代码规则,我做好了示例项目的基本架构,供你参考:

6. 「Json」文件配置好后,「card_course」的基本结构入上图所示,不需要的子集都可以暂时删除,缺少的子集则需要你主动新建。删除子集时记得顺带检查一下「app.json」里的相关内容是否已经一并删除。

注意:我个人建议你新建一个「wxml」文件的同时,把对应的「js」和「wxss」文件一起新建好,因为微信应用号的配置特点就是解析到一个「wxml」文件时,会同时在同级目录下找到同文件名的「js」和「wxss」文件,所以「js」文件需及时在「app.json」里预先配置好。

编写「wxml」时,根据微信应用号提供的接口编码即可,大部分就是以前的「div」,而我们现在就用「view」即可。需要用其它子集时,可以根据微信提供的接口酌情选择。

使用「class」名来设置样式,「id」名在这里基本没有什么用处。主要操作数据,不操作「dom」。

7. 以上是示例项目首页的「wxml」编码。从图中就可以看出,实现一个页面代码量非常少。

8. 「Wxss」文件是引入的样式文件,你也可以直接在里面写样式,示例中采用的是引入方式:

9. 修改代码后刷新一次,可以看到未设背景的「view」标签直接变成了粉色。

注意:修改「wxml」和「wxss」下的内容后,直接 F5 刷新就能直接看到效果,修改「js」则需点击重启按钮才能看到效果。

10. 另外,公共样式可以在「app.wxss」里直接引用。

11. 「Js」文件需要在「app.json」文件的「”page”」里预先配置好。为了项目结构清晰化,我在示例项目中的「index」首页同级目录新建其它四个页面文件,具体如下:

经过以上步骤,案例中的五个底部菜单就全部配置完毕了。

 4 赞  27 收藏  7 评论

关于作者:博卡君

代码狗/微信开发爱好者/全球首个应用号开发教程作者 个人主页 ·  我的文章 ·  12

  

直接登录 
最新评论
  • 王念一高一学生2016/09/24

     

    通宵吐血是个啥场面

     

  • Umbrella123技术支持2016/09/24

     

    在这上面搞二次开发,对一个互联网公司而言就是在拿自己的生命开玩笑,腾迅想怎么玩你就怎么玩你,腾迅和微信可都不是“开源”的

     

    • sender_is_sender高级打杂2016/09/26

       

      完全同意。微信的圈越来越宽,墙越来越高。

       

      • Umbrella123技术支持2016/09/26

         

        其实明眼人都明白,腾迅和微信那就是个只进不出的“黑洞”;虽然这个“小程序”看起来确实方便了些普通的开发者和以业务为主的普通互联网企业,但是如果一个企业真的完全指望这,那就是等于把自己的“命门”送给腾迅了,腾迅不是没干过“说封就封”的事!从一个产品的角度看,微信已经有点过度“开发”了,想着包罗万象提供各种各样的服务满足所有人的需求,这不是一个“应用”该干的事,即使它的后台架构再强大,也改变不了单应用单进程的实事,用户使用和体验上始终会受到局限!从商业的角度看,腾迅后面还有站着苹果谷歌二大真正的平台厂商呢,要是真的影响到了他们的利益,挡了他们的财路,说不准他们也会联合起来对腾迅进行封杀,到时候可就热闹了

         

        • sirdingjava的猴2016/09/26

           

          如果站在用户的角度,我倒是感觉即使被掐住了命门,有时也不得不做,对于用户来说,与其安装一个APP远远没有使用一个小程序方便。如果真是那样,就很难说了。

           

  •  

    非常不错的文章 我也在研究微信小程序

    来自 http://blog.jobbole.com/106049/

微信小程序开发教程(第2弹)

文章 – 伯乐在线

微信小程序开发教程(第2弹)

 

本系列:

微信小程序开发教程(第1弹)


今天一波三折,承受了超出预料的压力和煎熬,最后还是决定继续放出我的更新教程。我想我一没有泄露公司的代码,二没有提供泄露开发工具下载,只是从程序猿角度写了篇开发日志。我已经做好了最坏的准备,就算放弃这份工作,也会把完成的教程交给「名片盒」的团队继续更新发布下去!做了就绝不后悔!只是博卡君水平有限,文章还请各位多包容。

以上!开始吧:

小提示:

9月24日深夜,微信官方向外公开了微信小程序的文档 (含 API ):

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

第三章:微信小程序项目结构以及配置

找到创建的 demo 文件夹,把项目导入到你的编辑器,这里使用的是 Sublime Text 编辑器。

这个时候需要根据自己的项目需求结构进行更改了,项目根目录下面是首页渲染的几个 tabBar 页面,以及 app 的一些配置文件,如名片盒项目的 tabBar 是 3 个切换菜单:

我们先找到 app.json 文件打开配置好这几个菜单,配置好 ”tabBar”,这个直接把配置文件改成你自己设计的即可。

App.json 里面有几个配置项:

  • Pages:这个是编写的 js 文件,后缀 .js 这里不需要使用,配置好正确路径即可正常应用到(应用不到在重启微信开发者工具会直接报 page 错误)。
  • Window:配置顶部的一些样式,文档介绍比较详细。
  • tabBar:底部的几项配置,见名知意。
  • networkTimeout:暂时没发现用处,建议看文档。
  • 根据实际项目需求进行添加与更改。
  • iconPath 和 selectedIconPath:底部菜单按钮图片与得到切换点击高亮。
  • “text”:可以去掉,全部去掉会发现底部 tabar 高度会减少很多。

Json 文件配置好后,根据项目进行文件创建,

Demo:存放的是假数据,这一期的开发工具支持 require,假数据使用的是 .js 文件形式,

里面的数据结构 json 一致,把 data 暴露出去即可。

然后取数据 require 进来即可,这一点使用很方便;

Images:图片路径;

Page:除 tabar 以外的页面;

Servise:服务交付层(与后台联调真实数据时使用);

Wxss:一些公共的 css 文件。

看到这里大家发现每个页面都被连带好三个不同的后缀。分别页面,css,js 目前只能依照这样,是微信应用号的一个规范吧。

Wxss 文件是引入你写的样式文件,也可以直接在里面写样式。

Js 文件需全部配置到 pages 里面才能生效。

下一章:微信小程序首页面开发。

第四章:微信小程序首页面开发

进行了各种准备与配置后,来到首页开发。首先需要实现首页效果图如下:

Template 名片很多,需要用模板。

这里需要微信提供的基础组件大致是 input(搜索框)、

action-sheet(右边是个底部下拉菜单,需要下拉菜单)、

Scroll-view (右边 ABC 跳转)、(这个目前实现还有点问题,正在攻克中)。


View 是块元素,整个搜索框的一个样式。

  • 名片夹:由于该项目主打名片功能,故很多地方使用,所以需要把名片以 template 分离出来。
  • Template:定义一个模板,name 模板的名字其实是个作用域。
  • Block:循环控制,名片很多,必须用循环出来,和很多操作数据的前端框架循环差不多。
  • 支持自定义属性 data,这里用作判断线上名片以及线下名片。

View 里面是一些数据引入,里面是支持三目运算符。

引入 template 时非常方便,is 和 name 一样,data 是 nameData 传递过来的数据填充。

一切都绑定数据为中心点。

取到数据具体操作根据你数据结构:

这里的数据结构和 json 数据结构一样,

这里如要传到页面的话即是

this.setData({

nameData:card_list_name.data.cards,

timeData:card_list_time.data.cards

});

因为页面遍历的是 nameData,timeData

可以看下打印出来的数据结构,根据你的结构进行解析与传递。

也可以看下这里对数据的一些操作。(这里须根据定义的 json 数据格式来操作的)

名片的样式由于很多页面需要使用放在 common.css 里面,这个 common.css 是所有页面都需要用到,一些初始化设置。它是在 pp.wxss 里面引用之后才能被映射到全局 APP。

搜索框:其中 bindChange 为输入框发生改变事件。微信提供的 bindchange 在支持方面还有小问题,目前是失去焦点才能触发到此事件的发生,待后续完善吧,先实现功能再说。

 

菜单栏:做到菜单栏,使用微信提供的下拉菜单组件 action-sheet,它被触发的条件在这里。

一切以绑定事件为起点:

还是得先布好局才能被调动。

Js 配置:

Data 初始化数据:

这里得取非,直接设置 false 调不出来: 调用事件。

调出来还得去掉它啊:如下相同即可

取消直接上事件即可。(分为菜单栏外部与底部)

//好了,就是这么简单。实现效果简单,体验效果确实非常不错。

还需要个 loading 效果(暂时没做动画,后期再考虑。)

Loading 布局

首页的最外层 view

根据微信的生命周期

加载条完成。

扫一扫,直接调用拍照功能,从这里看到微信提供的拍照 api 使用起来非常快速,只需根据需求配置即可。

点击扫一扫之后,在开发者工具即可看到如下效果。

做到这里说明下,dom 长度有限制,页面的结构太长,也是无法渲染的,暂且把公司排序暂时先去掉了。

左边的 ABC 跳转(还在继续完善中)。

这里还有个左滑删除名片功能,微信没有提供这个在移动端很实用的功能真的比较遗憾,后面得花点时间自己写下(后续完善)。

 3 赞  5 收藏  2 评论

关于作者:博卡君

代码狗/微信开发爱好者/全球首个应用号开发教程作者 个人主页 ·  我的文章 ·  12

  

直接登录 
最新评论
  • 晓童 2016/09/28

     

    谢谢楼主的分享,正好可以去练练手

     

  •  

    有木有源码可以让菜鸟参考下

    来自 http://blog.jobbole.com/106098/?utm_source=blog.jobbole.com&utm_medium=relatedPosts

     

    微信小程序开发教程(第3弹)


    感谢朋友们的支持!这两天博卡君收到了很多支持和安慰,也认识了很多志同道合的朋友。目前微信公布的工具和代码都不是正式版,随时有可能调整,大家先体验和学习为主吧。最近这个教程搞得我也心力交瘁了,虽然苦逼,但很开心。

    第五章:微信小程序名片夹详情页开发

    今天加了新干货!除了开发日志本身,还回答了一些朋友的问题。

    闲话不多说,先看下「名片盒」详情页的效果图:

    备注下大致需求:顶部背后是轮播图,二维码按钮弹出模态框信息、点击微信栏、点击存入手机,地址栏需要地图展示,名片分享也是模态框指引。

    首先是轮播图,autoplay 自动播放,interval 轮播的时间,duration 切换速度,可以根据自己需求去添加。

    • Delete:是删除按钮,加载进来是隐藏的,需用户点轮播图进去后,轮播图全屏显示才出来。
    • noClickImg 与 ClickImg:切换全屏与非全屏轮播图,绑定了点击事件 changeClick 来切换,只是改变样式即可。
    • Block:图片列表。
    • Number_img:当前轮播 index(currentNumber),与图片 length 集合(cardnum)。

    其中 currentNumber:

    这里可以看到全屏状态下当关闭按钮被点击后 getBackStyle,把 changeClick 切换到 imgFullScrenn 待命。

    再次点击返回原样式,

    切换后事件又走回到 getBackStyle 了,灵活运用。

    刷新下开发者工具可以看到具体效果如下:

    详情页可以看到信息基本都是样式一样,可以使用微信提供的循环 block。

    下面是详情页里面的个人信息数据,

    如果有信息就显示出来,没有数据的不显示,这里使用

    具体以 json 数据格式来处理,我们需要做的就是给它绑定 display 的值,然后我们调用即可。

    微信此版本的 setData 不支持异步更新数据,故而我们在发生真实网络数据请求时一定要在后面加上 forceUpdata(),强制触发视图渲染,否则会出现很多莫名其妙的 bug。

    这里说明下:如是服务器真实数据。

    可以看到会报错,可能是 js 的执行顺序,依次往下走,此时网络数据还在请求中。

    定义一个变量即可。

    当然这里的数据都是 push 上来的。

    以下是二维码弹出信息。

    这是弹出模态框二维码信息,布好局初始化是none状态。那里需要它直接绑定数据即可:

    方法是让它显示。

    需要用他的地方调用方法即可。(支持重复调用)

    详情页公司位置地图直接调用微信提供的接口实现(群里的 demo 有实现方式)。

    可以看下实现的效果:


    下一章:微信(小程序)名片盒我的页面开发。

    第六章:微信小程序「名片盒」「我」的页面开发

    效果图与需求:

    用户有多张名片,需要左右切换查看,往下切换是菜单按钮。

    这里需求两处滑动,用到了微信提供给我们的滑动组件 swiper,并且进行了嵌套使用,第一层是名片展示与菜单按钮的上下滑动,第二层是名片展示的左右滑动(支持互相嵌套使用的,可以放心使用)。

    Vertical 加上就是纵向滑动,去掉即是左右滑动。

    整体结构如下所示:

    点击事件绑定的是数据切换方式,因为需要支持多次点击切换。

    初始化数据是 nextSlide:

    再看下 nextSlide 事件。currentSlide 是当前页面的 index,改变它即可完成切换效果,可以看上图初始化数据时设置了 cs 是 0。

    因而赋值当前 data.cs+1 即可,再把绑定点击事件 clickNext 切换成 nextSlideAgain。

    再看下 nextSlideAgain 事件,执行的减去 1 个索引,实现多次点击切换效果。

    具体效果可以看到。

    点击个人名片进去编辑名片页面,由于需要带参,故而使用的是 wx.navgateTo。

    可以看下效果:

    最后上点干货:

    我们发出第一篇教程的时候有人就注意到这点了,怎么做真实数据交互,下面大家可以了解下。

    首先进去是 MD5 加密,requster 交互层。

    怎么引用 MD5.js?当然是模块化 require,被引用的 js 不要忘记 module.exports 出来。

    下面是 requester.js 引用 MD5.js。

    ApplicationRoot 是服务器地址(配置服务器时在开发设置页面查看 AppID 和 AppSecret,配置服务器域名)。

    Require.js 这里 module.exports 是暴露方法出去。

    这时候在全局 app.js 里面引入 require.js 映射到全局 global,这个 global 是全局的。

    这时候那个页面需要那个页面就直接去接受吧,模块化是不是很好用?

    可以完整的看下与后台做数据交互的一个请求实现方式如下:

    图一是 requester.js 里面的封装。

    图二是需要调用数据的页面渲染。

    大家有什么疑问可以多指点,会在下一章说明一些已知疑问。

    应该有一些人喜欢 sublime 编辑器,有人问怎么切换高亮,在你的右下角直接切换成 html 即可。

    来自 http://blog.jobbole.com/106107/?utm_source=blog.jobbole.com&utm_medium=relatedPosts

     

    微信小程序开发教程(第4弹)


    本系列:

    感谢大家支持!博卡君周末休息了两天,今天又回到战斗状态了。上周五晚上微信放出官方工具和教程了,推荐程序猿小伙伴们都去试一试,结合教程和代码,写写自己的 demo 也不错。

    闲话不多说,开始更新!

    第七章:微信小程序编辑名片页面开发

    编辑名片有两条路径,分为新增名片流程与修改名片流程。

    用户手填新增名片流程:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    首先跳转到我们的新增名片页面 1 需要传递用户的当前 userId,wx.navigateTo 带值跳转。Manual 为 true 设置用户走的是新增路线。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    新增名片页面 1 基本布局如下:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    取到 userId。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    使用微信自带的 input 组件验证也非常好用,如 maxLength 属性,可以限制用户输入长度,如我这的姓名长度是最大 5 位,直接数字 5 即可。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    也可以自定义一些验证效果,具体可以根据需求进行一些验证配置,取到用户输入的值,进行操作。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    这里绑定了自带的模态框提示组件。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    其中 modalHidden2 是模态框开关。

    另外 proptText 是需要提示的内容。

    即使很多输入框也支持数据动态改变,非常方便。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    实际效果,非常快捷,比以前省去很多事情,编写小程序,发现最大的好处可能就是我们不必去考虑一系列兼容性问题。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    最后还有个头像上传图片,测试了下目前上传到后台服务器还有点问题,应该是内测版本不太完善导致吧。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    设置的直接是背景图片。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    提交表单与跳转。

    提交表单使用的是自带的 bindsubmit 事件组件,在 button 组件上添加 formType=”submit” 即可,还有点需注意的是使用表单提交功能时 input 需加上 name 属性,这个传递方式是以键值对的形式传递的。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    这时候跳转到编辑页 2 页面,这个页面是根据用户填写的手机号码识别到匹配的公司,页面非常简单,一个数据循环而已,单选框日后可能还需要美化一下。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    同样也是一些数据绑定以及验证效果。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    实际渲染效果可以看到。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    这个和第一个编辑页面逻辑基本不相上下,一些基本验证与提交,这里就讲到前面两步骤即可,编辑页面 3 也是同理,这里不再过多啰嗦。

    修改名片流程效果图与需求,修改名片是一次性把以前填写的个人信息全部渲染出来,供用户来改动:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    名片图片模块,上传图片暂时还有点问题,这里就是模仿了个跳转组件,比较建议需要跳转的页面还是使用 wx.navigateTo 控制好一点,wx.navigateTo 提供了给我们不同的 3 个跳转路由,封装的都很好,而且跳转页面很多牵连到传值之类的,可以达到统一管理也可以避免一些看不到的 bug 吧,总之还是根据业务需求来定:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    姓名手机必填模块:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    个人信息模块,直接循环(block)出来:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    Onload 时我们请求必填与选填数据:

    • requiredGroup 必填中文信息
    • notRequiredGroup 选题中文信息
    • requiredGroupEn 必填英文信息
    • notRequiredGroupEn 选题英文信息

    // 请求名片对应的公司的中文信息的属性组数据,分为必填和选填

    // 选题项变量以 no 开头

    requester.getOfflineCardInfoGroupFields(userId, cardId,

    function (res) {

    //debugger

    var userName = res.card.userName;

    var mobile = res.card.mobile;

    var requiredGroup = res.requiredGroupCh;

    var notRequiredGroup = res.notRequiredGroupCh;

    var requiredGroupEn = res.requiredGroupEn;

    var notRequiredGroupEn = res.notRequiredGroupEn;

    var reqLen = requiredGroup.fields.length;

    var nreqLen = notRequiredGroup.fields.length;

    var reqLenEn = requiredGroupEn.fields.length;

    var nreqLenEn = notRequiredGroupEn.fields.length;

    self.setData({

    userName: userName,

    mobile: mobile,

    requireFields: requiredGroup.fields,

    notRequireFields: notRequiredGroup.fields,

    requireFieldsEn: requiredGroupEn.fields,

    notRequireFieldsEn: notRequiredGroupEn.fields,

    l1: reqLen,

    l2: nreqLen + reqLen,

    l3: reqLenEn + nreqLen + reqLen

    });

    self.forceUpdate();

    }, function (code, msg) {

    console.info(“code=” + code + “&msg=” + msg);

    });

    中英文信息必填与选填渲染:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    这里表单提交数据转换有点复杂(大家根据业务需求来做,不必花时间研究这里的方法),获取的是数组,按照后台需要的数据格式进行转换传递过去。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    今天再回去理下首页 A、B、C 定点跳转功能实现方法。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    首先是右边小索引布局以及数据绑定,数据绑定和名片夹列表上的字母一样,该字母下面有名片则渲染出来,没有则不需要渲染,id 同样是当前字母与右边显示的内容一样:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    数据 sort,和 group.name 数据一样:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    这里是因为 # 不支持设为 id(就是 id=”#”),故而进行了一个转化。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    点击事件:获取到当前 ID,以及绑定数据 toView 为当前 ID。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    首先名片列表,名片上的字母索引都在 scroll-view 里面,这个 scroll-view 必须设置好固定的高度,设置成 100% 与 100vh 是无效的,y 轴的滚动开关打开,scroll-into-view 需要跳转到它子元素的 id 上。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    可以看下:

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    这个 group.name==sortmsg,等于就是 A==A,B==B 同理。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    在这里如顶部有些菜单栏的话,你就要注意好布局了,不然会出现向下偏移这个菜单栏的高度,其实你只要和字母索引同级下即可避免此问题(这里的顶部菜单以模板分离出去了,分离模板的时候需注意下,需要在这里绑定模板的一些数据会出现失效,具体没有继续深入研究下去)。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    跳转功能基本实现(ohter 就是 # 底部)。

    第四弹!全球首个微信应用号开发教程!通宵吐血赶稿,每日更新!

    好了,今天更新到这里,下一篇我们聊聊「微信小程序分组功能开发及其它小功能完善」。

    来自 http://blog.jobbole.com/106105/?utm_source=blog.jobbole.com&utm_medium=relatedPosts


     

    微信小程序开发教程(第5弹)

  • 本系列:

    博卡君今天继续更新,忙了一天,终于有时间开工写教程。不罗嗦了,今天我们来看看如何实现一些前端的功能和效果。

    第八章:微信小程序分组开发与左滑功能实现

    先来看看今天的整体思路:

    进入分组管理页面–>点击新建分组新建

    进入到未分组页面基本操作

    进入到已建分组里面底部菜单栏操作–>从名片夹中添加进行操作。

    理清完基本流程我们开始开发。首先整个布局可以先看下,我再一步步讲。

    静态布好局后,我们开始实现新增分组效果,

    当然触发它出现的是

    显示窗口

    点击取消消失

    当里面的输入框内容发生改变时 bindinput 事件,大家别使用 bindchange 事件,这里的 bindchange 事件只有当失去焦点时才会被触发。

    当输入框事件发生时,确定按钮会变成可以点击状态,为空时,addTeam

    样式数据绑定。

    里面有表单就使用了 from。

    创建分组请求交互。

    创建分组完成,这里可能很多疑问,为什么不使用微信提供的模态框组件来实现,而是自己实现,其实我也很懒,非常想使用自带的模态框组件,但是发现在模态框里面提交表单好像有点麻烦,直接自定义了。

    接下来创建好的分组支持左滑删除与重命名,今天重点谈下左滑删除的实现方式。

    首先需要左滑的是被创建好的分组,未分组是写死的,故而不支持的。

    左滑删除使用了两个事件 bindtouchstart 与 bindtouchmove,这里必须绑定它的 id,这个 id 都是不同的,我这使用的用户创建完成后在后台生成的一个 id 号,之后我再 block 出来使用在这里,这个 id 都是唯一的,不能是相同的 id。

    样式布局,父元素是绝对定位,子元素删除是相对定位,鉴于动画效果,我这加了 css3 的动画效果,使滑动带点动画效果。

    现在我们来看事件构成:

    Bindtap 点击之后直接是跳转页面。

    左滑从触摸事件开始,当然需使用的参数在外面最好先定义一下:

    bindtouchStart 发生后,会执行 bindtouchmove 事件,在这里我们可以判断是否左右滑动:

    • Var dataId = e.currentTarget.id //获取到前面唯一的id;
    • If(key){   //用户左滑距离很长时会发生多次左滑事件,这里定义一个开关发生第一次之后就关闭它;
    • Touch是获取触摸点的一些数据,touches 是一个触摸点的数组,每个触摸点包括以下属性:
    • pageX,pageY:距离文档左上角的距离,文档的左上角为原点 ,横向为 X 轴,纵向为 Y 轴;
    • clientX,clientY:距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴;
    • screenX,screenY:距离屏幕左上角的距离,屏幕左上角为原点,横向为X轴,纵向为Y轴;

    这里使用 clientX,clientY 即可。

    我们在 bindtouchstart 时记录到开始的点,在 bindtouchmove 记录到触摸结束的点,如果 X 轴滑动大于 Y 轴的,再如果结束点-开始点小于一个数值(这个数组可以自己设置,鉴于灵敏度,我这设置的很小),右滑也是同理。

    判断到左滑与右滑事件后,我们就需要对当前组件绑定数据了,数据从那里来?可以看下我这数组一个来历,以及怎么被左滑事件里面获取到(我这数据是一个数组,需要在 wxml 里面 block 的)。

    这时候取到需要的数组,循环出来后,我进行对比,如果数据的 id== 当前被事件操作的 id,那么我给改数组再添加一个 right 向右偏移 15%,否则其他都不偏移,右滑同理,直接全部设置为 0。

    最后把数据到绑定到页面上来。

    OK,左滑效果实现。

    如果出现全部被滚动了,记得在外层加上,X 轴关闭即可。

    这时候你点击左滑会出现点透效果,官方文档提供给我们一个 catch,不冒泡点击事件,即可完美解决。

    点击删除事件弹出模态框供用户确定是否删除。

    这里你点击取消时还要记得把左滑删除按钮去掉可能用户体验会好点。

    一定记得在 data({

    modalHidden:true

    })

    不然会出现一加载页面即出现了模态框。

    点击未分组按钮进入到未分组名片列表页面。

    这个布局完全是 copy 首页过来的,后面只是数据接口有变而已,大家有兴趣可以回过去看下前面的。

    点击多选,会出现多选框和下面的一些操作按钮。都是些数据绑定,显示与隐藏类的实现比较简单。

    多选我们直接给 checked 设置 Boole 开关。

    选择好名片后点击设置分组会弹出新建好的分组列表供用户确定设置到那个分组里面(这里由于后台接口方面还在完善,不继续往下写了)。

    用户已建分组点击进去的是点击顶部菜单按钮出现下拉菜单栏,这里直接使用微信提供的组件。

    最后点击从名片夹中添加进入到以下页面:

    整个布局基本还是和首页面差不多,这里不再多讲,

    顶部菜单直接多选绑定数据即可。

    牵扯到表单类的基本全都是 from 表单提交事件。除小部分接口方面欠缺外,写到这里其实分组前端方面效果基本实现。

    好了,由于目前小程序开发工具图片上传还有点问题,拍照收纳无法实现,所以博卡君的微信小程序开发教程也先暂告一段落,等开发工具更新稳定后,我还会再追加教程的内容,有机会的话把成品也给大家看看。

    来自  http://blog.jobbole.com/106162/?utm_source=blog.jobbole.com&utm_medium=relatedPosts


普通分类: