unicloud26-小案例12 删除记录并处理异常请求

153 阅读1分钟

修改和删除

修改需要进入一个新的页面操作,删除就在详情页操作就行了,删除只需要一个提示框

给删除按钮一个点击事件,通过点击事件调用删除云函数进行操作,所以还需要新建一个删除云函数art_remove_row

删除功能云函数

const db = uniCloud.database()
exports.main = async (event, context) => {
	let {id} = event;
  return await db.collection("article").doc(id).remove()
};

前端删除方法: 1.将调用删除云函数的方法封装起来,在删除方法中进行判断,用户点击了确定删除才删,删除方法的then方法里也要进行跳转,删除成功后跳转到首页 2.需要对错误进行捕获,之前都没做过,这个功能在删除内容后在详情页刷新,由于已经没有这条数据了,就会产生报错,所以要用catch对错误进行捕获后,可以写一个弹出框提示用户 3.弹框消失后,跳转到首页

<script>
  let id;
  export default {
    data() {
      return {
        detail: {},
        // 加载更多组件,默认初始值为false
        loadState: false
      };
    },
    onLoad(e) {
      id = e.id;
      this.getDetail();
    },
    methods: {
      // 删除一条新闻详情方法
      // 因为在上面定义了全局变量id,可以在当前页面随时拿到ID,所以这里就不用传参了
      onRemove(){
        // 1.先要有一个删除的提示框再删,防止误操作
        // 2.将调用删除云函数的方法封装起来,用户确认删除后就调用
        uni.showModal({
          content:"是否确认删除?",
          success:res=>{
            if(res.confirm){
              this.removeFun()
            }
          }
        })
        },
        removeFun(){
          // 2.调用云函数删除内容
          uniCloud.callFunction({
            name:"art_remove_row",
            data:{
              // id:id
              id
            }
          }).then(res=>{
            uni.showToast({
              title:"删除成功"
            })
            // 弹窗显示完成后,跳转到首页
            setTimeout(()=>{
              uni.reLaunch({
                url:"/pages/index/index"
              })
            },800)
          })
        
      },
      // 获取详情数据的方法,调用云函数,传递id
      // then里面的res就是通过传递的id返回的返回值
      getDetail() {
        uniCloud.callFunction({
          name: "art_get_row",
          data: {
            // id:id
            id
          }
        }).then(res => {
          console.log(res);
          // 返回值是一个数组,里面只有一个值
          this.detail = res.result.data[0],
          // 拿到数据后,将正在加载组件的状态置为true
          this.loadState = true,
          // 动态设置标题栏为新闻title
          uni.setNavigationBarTitle({
            title:this.detail.title
          })
        }).catch(()=>{
          uni.showToast({
            icon:"error",
            title:"参数有误"
          })
          // 弹窗显示完成后,跳转到首页
          setTimeout(()=>{
            uni.reLaunch({
              url:"/pages/index/index"
            })
          },800)
        });
      }
    }
  }
</script>