小程序教程

基于LeanCloud实现访问网络与数据存储

字号+ 作者: 来源: 2016-11-23 09:49 我要评论( )

目标

使用LeanCloud JS_SDK读取电商系统的商品分类

准备

https://www.leancloud.cn上注册帐号,创建仓库,建Category表,建title字段

无限级分类建表结构

建立字段parent,类型为Pointer,指向Category对象

下载JS_SDK

https://unpkg.com/leancloud-storage@2.0.0-beta.2/dist/av-weapp.js

文档出处:https://leancloud.cn/docs/weapp.html

安装

将上面的js文件保存此util目录

使用

在category.js中引入

const AV = require('../../utils/av-weapp.js')

连接数据仓库,取查询所有分类

  1. Page({
  2.     onLoad: function(){
  3.         AV.init({
  4.         appId: "SgHcsYqoLaFTG0XDMD3Gtm0I-gzGzoHsz",
  5.         appKey: "xdv2nwjUK5waNglFoFXkQcxP",
  6.         });
  7.         var query = new AV.Query('Category');
  8.         query.find().then(function (categories) {
  9.             for (var i = 0; i < categories.length; i++) {
  10.                 var category = categories[i];
  11.                 console.log(category.attributes.title);
  12.             }
  13.         }).catch(function(error) {
  14.             alert(JSON.stringify(error));
  15.         });
  16.     }
  17. })
复制代码

这时控件台可以看到输出category所有分类

潮流女装 连衣裙 针织开衫 羽绒服 时尚T恤 家用电器 电视 空调

条件查询获得顶级分类
  1. query.equalTo('parent',null);
复制代码

这时控件台可以看到输出category顶级分类

潮流女装 家用电器

Pointer方式查询二级分类
  1.         // 查询父级分类下的所有子类
  2.         var parent = AV.Object.createWithoutData('Category', '581415bf2e958a005492150b');
  3.         query.equalTo('parent',parent);
复制代码

这时控件台可以看到输出category潮流女装分类下的所有子类

  1. 连衣裙
  2. 针织开衫
  3. 羽绒服
  4. 时尚T恤
复制代码

配合布局与js文件,实现分类页面

wxml:

  1. <view class="container">
  2.     <!-- 侧边栏 -->
  3.     <view class="sidebar">
  4.         <text wx:for="{{topCategories}}" wx:key="objectId" bindtap="tapTopCategory" data-object-id="{{item.objectId}}" data-index="{{index}}" class="{{highlight[index]}}">{{item.title}}</text>
  5.     </view>
  6.     <!-- GridView -->
  7.     <view class="gridview">
  8.         <dl wx:for="{{subCategories}}" wx:key="objectId">
  9.             <dt>
  10.                 <image src="{{item.avatar.attributes.url}}" mode="scaleToFit" />
  11.             </dt>
  12.             <dd>
  13.                 <text>{{item.title}}</text>
  14.             </dd>
  15.         </dl>
  16.     </view>
  17. </view>
复制代码

wxss

  1. /*页面背景*/
  2. page {
  3.     background-color: #f3f5f7;
  4. }

  5. /*容器总体布局为左右两列*/
  6. .container {
  7.     display: flex;
  8.     flex-direction: row;
  9.     justify-content: space-between;
  10. }

  11. /*侧边栏顶级分类给予固定宽度*/
  12. .sidebar {
  13.     width: 120px;
  14.     border-top: 1px solid #e5e5e5;
  15.     height: 568px;
  16. }

  17. /*text块状布局独占一行*/
  18. .sidebar text {
  19.     display: block;
  20.     border: 1px solid #e5e5e5;
  21.     border-top: 0;
  22.     height: 40px;
  23.     line-height: 40px;
  24.     text-align: center;
  25.     color: #232626;
  26.     font-size: 14px;
  27.     background-color: #fff;
  28. }

  29. /*hight light*/
  30. .sidebar text.highlight {
  31.     background-color: #f3f5f7;
  32.     color: #f23131;
  33.     border-right: 0;
  34. }

  35. /*网格布局子类九宫格分布*/
  36. .gridview {
  37.     width: 100%;
  38.     background-color: #fff;
  39.     margin-left: 5px;
  40. }

  41. /*向左流动*/
  42. .gridview dl {
  43.     float: left;
  44.     margin: 5px;
  45. }

  46. /*图片*/
  47. .gridview dt image {
  48.     width: 60px;
  49.     height: 60px;
  50. }

  51. /*文字*/
  52. .gridview dd text {
  53.     color: #6c6c6c;
  54.     font-size: 12px;
  55.     text-align: center;
  56.     display: block;
  57.     line-height: 20px;
  58. }
复制代码

js:

  1. const AV = require('../../utils/av-weapp.js')

  2. Page({
  3.     data: {
  4.         topCategories: [],
  5.         subCategories: [],
  6.         highlight:['highlight','','']
  7.     },
  8.     onLoad: function(){
  9.         this.getCategory(null);
  10.         // hard code to read default category,maybe this is a recommend category later.
  11.         this.getCategory(AV.Object.createWithoutData('Category', '581415bf2e958a005492150b'));
  12.     },
  13.     tapTopCategory: function(e){
  14.         // 拿到objectId,作为访问子类的参数
  15.         var objectId = e.currentTarget.dataset.objectId;
  16.         // 查询父级分类下的所有子类
  17.         var parent = AV.Object.createWithoutData('Category', objectId);
  18.         this.getCategory(parent);
  19.         // 设定高亮状态
  20.         var index = parseInt(e.currentTarget.dataset.index);
  21.         this.setHighlight(index);

  22.     },
  23.     getCategory: function(parent){
  24.         var that = this;
  25.         var query = new AV.Query('Category');
  26.         // 查询顶级分类,设定查询条件parent为null
  27.         query.equalTo('parent',parent);
  28.         query.find().then(function (categories) {
  29.             if (parent){
  30.                 that.setData({
  31.                     subCategories: categories
  32.                 });
  33.             }else{
  34.                 that.setData({
  35.                     topCategories: categories
  36.                 });
  37.             }
  38.         }).catch(function(error) {
  39.         });
  40.     },
  41.     setHighlight: function(index){
  42.         var highlight = [];
  43.         for (var i = 0; i < this.data.topCategories; i++) {
  44.             highlight[i] = '';
  45.         }
  46.         console.log(index);
  47.         highlight[index] = 'highlight';
  48.         this.setData({
  49.             highlight: highlight
  50.         });
  51.     }
  52. })
复制代码


 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 微信小程序 轮播图 swiper图片组件

    微信小程序 轮播图 swiper图片组件

    2016-11-23 09:49

  • 微信小程序 开发 微信开发者工具 快捷键

    微信小程序 开发 微信开发者工具 快捷键

    2016-11-23 09:49

  • 微信小程序 页面跳转 传递参数

    微信小程序 页面跳转 传递参数

    2016-11-23 09:49

  • 微信小程序 如何获取时间

    微信小程序 如何获取时间

    2016-11-23 09:49

网友点评
l