摘要: 本实例将演示从零开发一个微信应用号的过程,页面轮播与跳转传值,实现单元格自定义布局,全部源码可通过github下载。

下载最新版的微信小程序开发工具,目前是v0.9.092300

下载地址:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html

官方文档:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html

git下载地址:http://git.oschina.net/dotton/news

先看下效果图:

一、新建应用

1.内测阶段对于无内测号的开发者,请点无AppId。

2.然后选择一个本地目录作为工程目录。

3.项目名称任意,设置好目录,勾上当前目录创建quick start项目。如图:

4.点击添加项目,这时可以运行的效果。是自己的微信个人信息以及一HelloWorld文本框。

5.右边是调试窗口,有2个警告,是由于没有AppID导致的,可以暂时忽略,不影响开发。

6.提示一下,在app.json中设置debug:true,这样控制台看到实时的交互信息,以及将来在js文件中设置断点,类似与Chrome的调试工具以及Firefox的Firebug。

关于首页配置:

  1. {
  2. "pages":[
  3. "pages/index/index",
  4. "pages/logs/logs"
  5. ],
  6. "window":{
  7. "backgroundTextStyle":"light",
  8. "navigationBarBackgroundColor": "#fff",
  9. "navigationBarTitleText": "WeChat",
  10. "navigationBarTextStyle":"black"
  11. },
  12. "debug":true
  13. }

其中pages属性表明每一个页面的存在,其中第一条为首页,即pages/index/index

二、请求网络API接口

1.前提条件:

这里需要用到聚合数据的新闻接口,前往:https://www.juhe.cn/docs/api/id/235 注册、申请接口,拿到key,我这里已经申请到一个key:482e213ca7520ff1a8ccbb262c90320a,可以直接拿它做测试,然后就可以将它集成到自己的应用了。

2.使用微信小程序接口来访问网络:

改写index.js文件:

  1. //index.js
  2. //获取应用实例
  3. var app = getApp()
  4. Page({
  5. data: {
  6. motto: 'Hello World',
  7. userInfo: {}
  8. },
  9. //事件处理函数
  10. bindViewTap: function() {
  11. wx.navigateTo({
  12. url: '../logs/logs'
  13. })
  14. },
  15. onLoad: function () {
  16. // 访问聚合数据的网络接口
  17. wx.request({
  18. url: 'http://v.juhe.cn/toutiao/index',
  19. data: {
  20. type: '' ,
  21. key: '482e213ca7520ff1a8ccbb262c90320a'
  22. },
  23. header: {
  24. 'Content-Type': 'application/json'
  25. },
  26. success: function(res) {
  27. console.log(res.data)
  28. }
  29. })
  30.  
  31. console.log('onLoad')
  32. var that = this
  33. //调用应用实例的方法获取全局数据
  34. app.getUserInfo(function(userInfo){
  35. //更新数据
  36. that.setData({
  37. userInfo:userInfo
  38. })
  39. })
  40. }
  41. })

3.查看效果,检查Console控制台,得到以下信息:

说明已经成功取得到了数据。

三、将json格式的数据渲染到视图

这里要用到swipe组件实现大图轮播,文档见:https://mp.weixin.qq.com/debug/wxadoc/dev/component/swiper.html

1.清空原index.wxml内容,加入如下代码:

  1. <swiper indicator-dots="true"
  2. autoplay="true" interval="5000" duration="1000">
  3. <block wx:for="{{topNews}}">
  4. <swiper-item>
  5. <image src="{{item.thumbnail_pic_s02}}" class="slide-image" width="355" height="150"/>
  6. </swiper-item>
  7. </block>
  8. </swiper>

2.相应地在index.js文件的onLoad方法中加入如下代码来获取网络数据

  1. //index.js
  2. //获取应用实例
  3. var app = getApp()
  4. Page({
  5. data: {
  6. topNews:[],
  7. techNews:[]
  8. },
  9. onLoad: function () {
  10. var that = this
  11. // 访问聚合数据的网络接口-头条新闻
  12. wx.request({
  13. url: 'http://v.juhe.cn/toutiao/index',
  14. data: {
  15. type: 'topNews' ,
  16. key: '482e213ca7520ff1a8ccbb262c90320a'
  17. },
  18. header: {
  19. 'Content-Type': 'application/json'
  20. },
  21. success: function(res) {
  22. if (res.data.error_code == 0) {
  23. that.setData({
  24. topNews:res.data.result.data
  25. })
  26. } else {
  27. console.log('获取失败');
  28. }
  29. }
  30. })
  31.  
  32. }
  33. })

3.看到轮播已经成功的展示出来了

4.依样画葫芦,同样操作读取列表新闻:

  1. <view class="news-list">
  2. <block wx:for="{{techNews}}">
  3. <text class="news-item">{{index + 1}}. {{item.title}}</text>
  4. </block>
  5. </view>

配合样式表,不然列表文字排版是横向的,将以下css加到index.wxss中:

  1. .news-list {
  2. display: flex;
  3. flex-direction: column;
  4. padding: 40rpx;
  5. }
  6. .news-item {
  7. margin: 10rpx;
  8. }

  1. 继续美化,文字列表也采用缩略图+大标题+出处+日期的形式

样式表与布局文件 index.wxss

  1. /**index.wxss**/
  2. .news-list {
  3. display: flex;
  4. flex-direction: column;
  5. padding: 40rpx;
  6. }
  7.  
  8. .news-item {
  9. display: flex;
  10. flex-direction: row;
  11. height:200rpx;
  12. }
  13.  
  14. .news-text {
  15. display: flex;
  16. flex-direction: column;
  17. }
  18.  
  19. .news-stamp {
  20. font-size: 25rpx;
  21. color:darkgray;
  22. padding: 0 20rpx;
  23. display: flex;
  24. flex-direction: row;
  25. justify-content:space-between;
  26. }
  27.  
  28. .news-title {
  29. margin: 10rpx;
  30. font-size: 30rpx;
  31. }
  32.  
  33. .container {
  34. height: 5000rpx;
  35. display: flex;
  36. flex-direction: column;
  37. align-items: center;
  38. justify-content: space-between;
  39. /*padding: 200rpx 0;*/
  40. box-sizing: border-box;
  41. }
  42.  
  43. .list-image {
  44. width:150rpx;
  45. height:100rpx;
  46. }

index.wxml

  1. <!--index.wxml-->
  2. <swiper indicator-dots="true"
  3. autoplay="true" interval="5000" duration="1000">
  4. <block wx:for="{{topNews}}">
  5. <swiper-item>
  6. <image src="{{item.thumbnail_pic_s02}}" mode="aspectFill" class="slide-image" width="375" height="250"/>
  7. </swiper-item>
  8. </block>
  9. </swiper>
  10. <view class="container news-list">
  11. <block wx:for="{{techNews}}">
  12. <view class="news-item">
  13. <image src="{{item.thumbnail_pic_s}}" mode="aspectFill" class="list-image"/>
  14. <view class="news-text">
  15. <text class="news-title">{{item.title}}</text>
  16. <view class="news-stamp">
  17. <text>{{item.author_name}}</text>
  18. <text>{{item.date}}</text>
  19. </view>
  20. </view>
  21. </view>
  22. </block>
  23. </view>

四、跳转详情页与传值

保存当前点击的新闻条目信息中的title,参见官方文档:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/event.html

传值到详情页

  1. <!--logs.wxml-->
  2. <view class="container">
  3. <text class="news-title">{{title}}</text>
  4. <text class="news-info">暂时找不到WebView的组件接口,于是不能加载网页数据</text>
  5. </view>
  6. //事件处理函数
  7. bindViewTap: function(event) {
  8. wx.navigateTo({
  9. url: '../detail/detail?title='+event.currentTarget.dataset.newsTitle
  10. })
  11. }
  12.  
  13. //index.js
  14. //事件处理函数
  15. bindViewTap: function(event) {
  16. wx.navigateTo({
  17. url: '../detail/detail?title='+event.currentTarget.dataset.newsTitle
  18. })
  19. }
  1. <!--index.wxml-->
  2. //加入data-xxx元素来传值
  3. <view class="container news-list">
  4. <block wx:for="{{techNews}}">
  5. <view class="news-item" data-news-title="{{item.title}}" bindtap="bindViewTap">
  6. <image src="{{item.thumbnail_pic_s}}" mode="aspectFill" class="list-image"/>
  7. <view class="news-text">
  8. <text class="news-title">{{item.title}}</text>
  9. <view class="news-stamp">
  10. <text>{{item.author_name}}</text>
  11. <text>{{item.date}}</text>
  12. </view>
  13. </view>
  14. </view>
  15. </block>
  16. </view>

当然也可以通过获取全局的变量的方式传值,这里场景是由一个页面与子页面是一对一传值关系,所以不推荐,可参考quickStart项目中微信个人信息的传值方式来做。 app.js末尾加上

  1. globalData:{
  2. userInfo:null,
  3. newsItem:null
  4. }
  5. })

由于未在官方文档中找到WebView的组件,所以详情的网页正文暂时无法实现。

结语

整体开发过程还是比较舒适的,上手难度不高,过程中用到一定的CSS语法,本质上还是体现了一个H5开发模式,WXML实质上一种模板标签语言。


转载:https://my.oschina.net/u/1012086/blog/751455

微信小程序(应用号)开发新闻客户端的实战课程的更多相关文章

  1. 微信小程序(应用号)开发教程

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

  2. 微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击

    微信小程序的功能开发工具跟公众号的差别,小程序是一种减负思维对简单APP是巨大打击 摘要: 小程序和公众号最大的区别有如下四点:1.小程序没有粉丝,开发者在后台能看到的只能是累计用户访问数以及实时统计 ...

  3. 微信小程序(应用号)资源汇总整理

    微信小应用资源汇总整理 开源项目 WeApp - 微信小程序版的微信 wechat-weapp-redux-todos - 微信小程序集成Redux实现的Todo list wechat-weapp- ...

  4. 黄聪:微信小程序(应用号)资源汇总整理(转)

    微信小应用资源汇总整理 开源项目 WeApp - 微信小程序版的微信 wechat-weapp-redux-todos - 微信小程序集成Redux实现的Todo list wechat-weapp- ...

  5. Slog71_选取、上传和显示本地图片GET !(微信小程序之云开发-全栈时代3)

    ArthurSlog SLog-71 Year·1 Guangzhou·China Sep 12th 2018 ArthurSlog Page GitHub NPM Package Page 掘金主页 ...

  6. 微信小程序托管 推广 开发 就找北京动点软件

    微信小程序托管 外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询,索取案例! QQ:372900 ...

  7. 微信小程序--使用云开发完成支付闭环

    微信小程序--使用云开发完成支付闭环 1.流程介绍 2. 代码实现和逻辑思想描述 云函数统一下单 对应云函数 unipay [CloudPay.unifiedOrder] 函数思路 : 调用云函数封装 ...

  8. 微信小程序之蓝牙开发(详细读数据、写数据、附源码)

    本文将详细介绍微信小程序的蓝牙开发流程(附源码)准备:微信只支持低功耗蓝牙也就是蓝牙4.0,普通的蓝牙模块是用不了的,一定要注意. 蓝牙可以连TTL接到电脑上,再用XCOM调试 一开始定义的变量 va ...

  9. 基于微信小程序的系统开发准备工作

    腾讯推出微信小程序也有一段时间了,在各种行业里面也都掀起一阵阵的热潮,很多APP应用被简化为小程序的功能迅速推出,同时也根据小程序的特性推出各种独具匠心的应用,相对传统的APP来说,微信小程序确实能够 ...

随机推荐

  1. 习题:Wormhole(思路题)

    tyvj1763 描述 一维的世界就是一个数轴.这个世界的狭小我们几乎无法想象.在这个数轴上,有N个点.从左到右依次标记为点1到N.第i个点的坐标为Xi.经过漫长时间的物理变化和化学变化,这个一维世界 ...

  2. button的默认type居然是submit

    今天使用了html中的button标签,用js写了一点代码来完成onclick实践,当我点下它的时候,它不仅执行了我写的function,还把表单给提交了,一查它的button居然是sumbit. 然 ...

  3. [SDOI2010][bzoj1927] 星际竞速 [最小路径覆盖+费用流]

    题面 传送门 思路 仔细观察题目要求的东西,发现就是求一个最小路径覆盖,只不过可以跳跃(就是那个鬼畜的超级跳跃) 那么就直接上最小路径覆盖模版 对每个点,拆成两个点$X_i$和$Y_i$,建立超级源超 ...

  4. Fabric 和 Sawtooth 技术分析(下)

    http://blog.talkingdata.com/?p=6172 在前一篇文章(Fabric和Sawtooth技术分析(上))中,我们着重跟大家分享了 Fabric 相关的内容,在本篇文章中,我 ...

  5. CDOJ 30 裸最短路 SPFA

    最短路 Edit Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit ...

  6. webstorm卡顿

    http://blog.csdn.net/qq673318522/article/details/50583831 http://www.xiaobai8.com/Blog/1000.html

  7. 【LA5059】Playing With Stones (SG函数)

    题意:有n堆石子,分别有a[i]个.两个游戏者轮流操作,每次可以选一堆,拿走至少一个石子,但不能拿走超过一半的石子. 谁不能拿石子就算输,问先手胜负情况 n<=100,1<=a[i]< ...

  8. sgu 275 To xor or not to xor 线性基 最大异或和

    题目链接 题意 给定\(n\)个数,取其中的一个子集,使得异或和最大,求该最大的异或和. 思路 先求得线性基. 则求原\(n\)个数的所有子集的最大异或和便可转化成求其线性基的子集的最大异或和. 因为 ...

  9. Eclipse中的android项目前面有叹号 (转)

    问题描述:在Eclipse中导入一个项目,在项目名上有感叹号出现,基本上是由于build path的问题. 解决方法: 在项目上右击-->build path -> configure b ...

  10. Bitmap类

    一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetP ...