微信小程序 cnode社区版本

微信小程序 cnode社区版本

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

参考资料:https://github.com/coolfishstudio/wechat-webapp-cnode

demo2.gif
8.png

项目结构

<pre>
│ .gitattributes
│ .gitignore
│ app.js # 小程序逻辑
│ app.json # 小程序公共设置(页面路径、窗口表现、设置网络超时时间、设置多tab)
│ app.wxss # 小程序公共样式表
│ README.md # 小程序项目说明

├─image # 小程序图片资源
|
├─pages # 小程序文件
│ ├─common
│ ├─detail
│ ├─index
│ │ index.js # 页面逻辑
│ │ index.wxml # 页面渲染层
│ │ index.wxss # 页面样式
│ ├─login
| ├─logs
│ └─topics

└─utils # 小程序公用方法模块
api.js
util.js
</pre>

开发环境

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

开发过程

  1. 配置默认启动页面

在app.json文件修改注册页面的顺序,把“pages/topics/topics” 放在第一位,就会自动把topics.wxml 显示默认启动

<pre>
{
"pages":[
"pages/topics/topics",
"pages/detail/detail",
"pages/login/login",
"pages/index/index",
"pages/logs/logs"
]
}
</pre>

  1. 配置tabBar

    tabBar 是一个数组,只能配置最少2个、最多5个 tab,tab 按数组的顺序排序。

<pre>
"tabBar":{
"color":"#444",
"selectedColor":"#80bd01",
"backgroundColor":"#fff",
"borderStyle":"white",
"list":[{
"pagePath":"pages/topics/topics",
"text":"首页",
"iconPath":"images/bar/CNode.png",
"selectedIconPath":"images/bar/CNodeHL.png"
},{
"pagePath":"pages/index/index",
"text":"我的",
"iconPath":"images/bar/ME.png",
"selectedIconPath":"images/bar/MEHL.png"
}]
}
</pre>

  1. window 设置

    具体看文档https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html?t=1475052056717

  2. 简单封装wx.request(OBJECT)

<pre>
// get请求方法
function fetchGet(url, callback) {
// return callback(null, top250)
wx.request({
url: url,
header: { 'Content-Type': 'application/json' },
success (res) {
callback(null, res.data)
},
fail (e) {
console.error(e)
callback(e)
}
})
}

// post请求方法
function fetchPost(url, data, callback) {
  wx.request({
    method: 'POST',
    url: url,
    data: data,
    success (res) {
      callback(null, res.data)
    },
    fail (e) {
      console.error(e)
      callback(e)
    }
  })
}

module.exports = {
  // METHOD
  fetchGet: fetchGet,
  fetchPost: fetchPost
}

</pre>

  1. 滚动底部加载下一页

使用了小程序自带的scroll-view组件

2.png
  <!--列表list组件 -->
  <template name="list">
    <scroll-view class="scroll-posts-list" style="height:100%" scroll-y="true" bindscrolltolower="lower">
      <view class="postslist">
        <block wx:for="{{postsList}}">
          <view class="posts-list">
            <navigator url="/pages/detail/detail?id={{item.id}}">
              <view class="posts-list-info" index="{{index}}">
                  <image class="userimg" src="{{item.author.avatar_url}}" />
                  <view class="item-box">
                    <view class="userinfo">
                      <text class="username">{{item.author.loginname}}</text>
                      <text class="time">{{item.last_reply_at}}</text>
                    </view>
                    <view class="posts-title">
                      <view class="posts-tag hot" wx:if="{{item.top === true}}">置顶</view>
                      <view class="posts-tag" wx:if="{{item.good === true}}">精华</view>
                      <text>{{item.title}}</text>
                    </view>
                  </view>
              </view>
              <view class="bar-info">
                <view class="bar-info-item">
                  <image class="bar-info-item-icon" src="/images/icon/reply.png"></image>
                  <view class="bar-info-item-number">{{item.reply_count}}</view>
                </view>
                <view class="bar-info-item">
                  <image class="bar-info-item-icon" src="/images/icon/visit.png"></image>
                  <view class="bar-info-item-number">{{item.visit_count}}</view>
                </view>

                <view class="bar-info-item2"  wx:if="{{item.tab === 'good'}}">
                  <image class="bar-info-item-icon" src="/images/icon/type.png"></image>
                  <view class="bar-info-item-number">精华</view>
                </view>
                <view class="bar-info-item2"  wx:if="{{item.tab === 'share'}}">
                  <image class="bar-info-item-icon" src="/images/icon/type.png"></image>
                  <view class="bar-info-item-number">分享</view>
                </view>
                <view class="bar-info-item2"  wx:if="{{item.tab === 'ask'}}">
                  <image class="bar-info-item-icon" src="/images/icon/type.png"></image>
                  <view class="bar-info-item-number">问答</view>
                </view>
                <view class="bar-info-item2"  wx:if="{{item.tab === 'job'}}">
                  <image class="bar-info-item-icon" src="/images/icon/type.png"></image>
                  <view class="bar-info-item-number">招聘</view>
                </view>
              </view>
          </navigator>
          </view>
        </block>
      </view>
    </scroll-view>

    <loading class="loading" hidden="{{hidden}}">
      <text class="loading-font">加载中...</text>
    </loading>
  </template>
  <!-- topics.wxml  -->
  <import src="../common/nav.wxml"/>
  <import src="../common/list.wxml"/>

  <view class="page topics">
    <template is="nav" data="{{ navList, activeIndex }}"/>
    <template is="list" data="{{ postsList, hidden }}"/>
  </view>

滚动区的最大的父级层要设置height: 100%; 不然无法检测滚动事件
也不知道是不是我布局的原因,我这里是一定要这样设置的

.topics{
  height: 100%;
  overflow: hidden;
}
// 滑动底部加载
lower: function() {
  console.log('滑动底部加载', new Date());
  var that = this;
  that.setData({
    page: that.data.page + 1
  });
  if (that.data.tab !== 'all') {
    this.getData({tab: that.data.tab, page: that.data.page});
  } else {
    this.getData({page: that.data.page});
  }
}

用法

  <scroll-view class="scroll-posts-list" style="height:100%" scroll-y="true" bindscrolltolower="lower">
  </scroll-view>

使用说明

  1. 将仓库克隆到本地:
$ git clone https://github.com/vincentSea/wechat-cnode.git
  1. 打开微信Web开放者工具(注意:必须是0.9.092300版本)

  2. 选择添加项目,填写或选择相应信息

  • AppID:点击右下角无AppID
  • 项目名称:随便填写,因为不涉及到部署,所以无所谓
  • 项目目录:选择刚刚克隆的文件夹
  • 点击添加项目

特别感谢

感谢 coolfish 的项目案例

coolfish的github: https://github.com/coolfishstudio

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 微信小程序 cnode社区版本 官方文档:https://mp.weixin.qq.com/debug/wxado...
    vincentDu阅读 501评论 0 3
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,360评论 2 44
  • 爱是什么?你我便是什么? 到了**山下,w先生早已经到了,我打趣到:“我还以为你要在屋里哭半天才能准备来呢”,w先...
    阿东咚咚咚阅读 462评论 0 2
  • 快要奔五了,“狼”来是迟早事。“狼”没来之前,曾听过或看到过好多关于“狼”来了会有啥症状。什么潮热汗出了,心...
    田园小翠儿阅读 232评论 0 1
  • 逛书店的时候,无意间留意到展柜有本书《程序员必读的职业规划书》,还是李开复推荐的。 鉴于之前他推荐的《IT创业疯魔...
    yuppy_zyp阅读 869评论 0 1