微信小程序云开发个人博客项目实战(2)-- 专题的增删改查

微信小程序云开发个人博客项目实战目录
一、准备工作及引入 Vant Weapp 小程序 UI 组件库
二、专题的增删改查
三、文章的增删改查
四、云函数获取微信公众号access_token
五、云函数同步公众号文章到小程序

一、功能

  • 专题列表显示
  • 专题增加、左滑编辑、删除
  • 专题排序
专题列表 增加专题 编辑删除

地址:https://github.com/itguliang/miniprogram-itguliang-cloud

二、实现

对应的json文件引入要用到的组件

{
  "usingComponents": {
    "van-button": "@vant/weapp/button",
    "van-dialog": "@vant/weapp/dialog",
    "van-field": "@vant/weapp/field",
    "van-swipe-cell": "@vant/weapp/swipe-cell"
  }
}
1、增加专题

增加专题的弹框 --- vant-weapp Dialog 弹出框

<!-- dialogShow 控制显示隐藏 -->
<van-dialog use-slot asyncClose="true" title="" show="{{ dialogShow }}" show-cancel-button bind:cancel="categoryDialogClose" bind:confirm="saveCategory">
  <van-cell-group>
    <van-field value="{{ categoryName }}" placeholder="请输入专题" bind:change="categoryChange" />
  </van-cell-group>
</van-dialog>

按钮触发增加专题的弹框的显示

<van-button icon="plus" type="default" bindtap="categoryDialogShow" />

categoryDialogShow 方法

categoryDialogShow: function(event) {
    this.setData({
      categoryName: "",
      dialogShow: true
    });
  }

保存专题

saveCategory: function() {
  if (!this.data.categoryName) {
      wx.showToast({
        title: '专题名称不能为空',
      })
      this.setData({
        dialogShow: true
      });
      return
    }
    const db = wx.cloud.database()
    db.collection('categories').add({
      data: {
        name: this.data.categoryName
      },
      success: res => {
        this.categoryDialogClose();
        this.loadData();
        wx.showToast({
          title: '添加成功',
        })
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '添加失败'
        })
      }
    })
  }
2、专题列表

页面:

<van-swipe-cell id="swipe-cell" right-width="{{ 95 }}" left-width="{{ 0 }}" wx:for="{{categories}}" wx:key="_id">
    <view class="category-card"> {{item.name}}</view>
    <view slot="right" class="category-card-opt">
      <text class="category-card-opt-edit" data-category-name="{{item.name}}" data-category-id="{{item._id}}" bindtap="categoryDialogShow">编辑</text>
      <text class="category-card-opt-del" data-category-id="{{item._id}}" bindtap="categoryDelConfirm">删除</text>
    </view>
</van-swipe-cell>

页面加载时加载列表数据

  onLoad: function(options) {
    this.loadData();
  },
  // 加载专题列表
  loadData: function() {
    const db = wx.cloud.database()
    // 查询当前用户所有的 categories
    db.collection('categories').get({
      success: res => {
        this.setData({
          categories: res.data
        });
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '查询记录失败'
        })
      }
    })
  }
3、专题修改
<van-swipe-cell id="swipe-cell" right-width="{{ 95 }}" left-width="{{ 0 }}" wx:for="{{categories}}" wx:key="_id">
    <view class="category-card"> {{item.name}}</view>
    <view slot="right" class="category-card-opt">
      <!-- 传入id和name -->
      <text class="category-card-opt-edit" data-category-name="{{item.name}}" data-category-id="{{item._id}}" bindtap="categoryDialogShow">编辑</text>
      <text class="category-card-opt-del" data-category-id="{{item._id}}" bindtap="categoryDelConfirm">删除</text>
    </view>
</van-swipe-cell>

修改 categoryDialogShow 方法

categoryDialogShow: function(event) {
    this.setData({
      categoryName: event.target.dataset.categoryName ? event.target.dataset.categoryName : "",
      categoryId: event.target.dataset.categoryId ? event.target.dataset.categoryId : "",
      dialogShow: true
    });
}

修改 saveCategory 方法

// 保存专题
  saveCategory: function(event) {
    if (!this.data.categoryName) {
      wx.showToast({
        title: '专题名称不能为空',
      })
      this.setData({
        dialogShow: true
      });
      return
    }
    if (!this.data.categoryId) {
      this.addCategory();
    } else {
      this.updateCategory();
    }
  }

updateCategory 方法

updateCategory: function() {
    const db = wx.cloud.database()
    db.collection('categories').doc(this.data.categoryId).update({
      data: {
        name: this.data.categoryName
      },
      success: res => {
        this.categoryDialogClose();
        this.loadData();
        this.setData({
          categoryId: ""
        })
        wx.showToast({
          title: '更新成功',
        })
      },
      fail: err => {
        icon: 'none',
        console.error('[数据库] [更新记录] 失败:', err)
      }
    })
  }
4、专题删除
<van-swipe-cell id="swipe-cell" right-width="{{ 95 }}" left-width="{{ 0 }}" wx:for="{{categories}}" wx:key="_id">
    <view class="category-card"> {{item.name}}</view>
    <view slot="right" class="category-card-opt">
      <text class="category-card-opt-edit" data-category-name="{{item.name}}" data-category-id="{{item._id}}" bindtap="categoryDialogShow">编辑</text>
      <!-- 传入id -->
      <text class="category-card-opt-del" data-category-id="{{item._id}}" bindtap="categoryDelConfirm">删除</text>
    </view>
</van-swipe-cell>

一般删除要给个确认删除的提示,这里用到Dialog的函数调用,要在页面声明

<van-dialog id="van-dialog" />  

categoryDelConfirmremoveCategory 方法

import Dialog from '@vant/weapp/dialog/dialog'; //引入组件

...

categoryDelConfirm: function(event) {
    this.setData({
      categoryId: event.target.dataset.categoryId ? event.target.dataset.categoryId : ""
    });
    Dialog.confirm({
      message: '确定删除吗?'
    }).then(() => {
      this.removeCategory();
    }).catch(() => {
      // on cancel
    });
  }

...

removeCategory: function() {
    if (this.data.categoryId) {
      const db = wx.cloud.database()
      db.collection('categories').doc(this.data.categoryId).remove({
        success: res => {
          this.loadData();
          this.setData({
            categoryId: ''
          })
          wx.showToast({
            title: '删除成功',
          })
        },
        fail: err => {
          wx.showToast({
            icon: 'none',
            title: '删除失败',
          })
        }
      })
    } else {
      wx.showToast({
        title: '无记录可删,请见创建一个记录',
      })
    }
  }

三、遇到的问题

1、van-dialog 的按钮样式错乱,去掉 app.json 中的 "style": "v2" 后问题解决

按钮样式错乱 解决后正常

参考:
https://github.com/youzan/vant-weapp/issues/2367
https://developers.weixin.qq.com/community/develop/doc/000e2abbd40b70cbfb097782f5b800

2、van-dialog 函数调用需要注意:

wxml 中声明:

<van-dialog id="van-dialog" />  //写了没反应发现是缺这句

js 中引入、调用:

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

推荐阅读更多精彩内容