鸿蒙应用开发之使用用户首选项存储数据

完善功能:实现添加购物车和立即购买功能


前言

本章是对上一篇文章(商品详情页)的补充

 需要用到黑马智慧商城接口。地址:wiki - 智慧商城-实战项目 (apifox.com)


一、添加商品至购物车

如果用户进行了登录操作,那么后台会返回一个Token给你。

业务逻辑是:有Token才能点击加入购物车和立即购买,否则跳转到登录页进行登录。

1.登录页

在用户点击(立即登录)按钮的时候,接收后台返回的Token数据,并存入

1.获取后台返回的Token值

//登录请求
   login(){
     axios.post('http://smart-shop.itheima.net/index.php?s=/api/passport/login',{
      form:{
        isParty:false,//是否存在第三方用户信息
        mobile:this.mobilePhone,//手机号
        partyData:{},//三方登录信息
        smsCode:'246810'//短信验证码
      }
    },{
       headers:{
       platform:'H5'
       }
     }).then((res)=>{
       //获取接口返回的token
       this.setToken('tokensss',res.data.data.token)
       //路由跳转
       router.replaceUrl({url:"pages/Layout"})
       //提示发送的状态
      promptAction.showToast({
        message:res.data.message,
        duration:2000
      })
    }).catch((err)=>{
      console.info('err'+err)
    })
  }

2.将Token值存入本地

//用户首选项,存入token
  setToken(key,token?){
    //使用用户首选项进行存储
    //this.context:当前页面的上下文,key:存入用户首选项的名称(键名)
    preferences.getPreferences(this.context,key)
      .then((res)=>{//res:获取到的首选项实例,可以对res操作进行增删改查
        //判断是否已经存在key, flag:boolean,返回有或者无
        res.has(key).then((flag)=>{
          //如果有键名key存在了
          if(flag){
            //调用get方法获取值(key:键名,‘默认值0’:填入默认值,val:值的内容)
            res.get(key,'默认值0',(err:Error,val:preferences.ValueType)=>{
              if(err){
                console.log(err.message)
              }
              console.log("您的Token为:" + val);
            })
          }else{//如果键名key不存在
            //调用put方法,存入。(key:键名,token:要存入的值)
            res.put(key,token).then(()=>{
              //刷盘,进行数据持久化
              res.flush()
              console.log('刷入完成 token:'+token)
            })
          }
        })
      })
  }

2.购物车页

1.判断是否有Token

只需要在加入购物车添加点击事件:

preferences.getPreferences(this.context,"tokensss").then((res)=>{
              res.has('tokensss').then((bol)=>{
                //登陆过了,存在Token:
                if(bol){
                  res.get("tokensss","null").then((val)=>{
                    //this.addShopCart()函数,则向后台发送请求,添加商品至购物车
                    this.addShopCart(val,this.gid,this.num.price)
                  })
                }else {//否则跳转登录页
                  router.replaceUrl({url:"pages/Login"})
                  promptAction.showToast({message:'请先登录'})
                }
              })
            })

2.发送请求,添加至购物车 

即this.addShopCart()函数:

 //加入购物车
  async addShopCart(token,gid,gnum){
    const data = await axios.post('https://smart-shop.itheima.net/index.php?s=/api/cart/add',{
      goodsId:gid,
      goodsNum:gnum,
      goodsSkuId:"0"
    },{
      headers:{
        ['Access-Token']:token,//这里的Access-Token需要用中括号加引号包起来,否则会出错!!!
        platform:'H5'
    }})
    //提示添加商品至购物车
    promptAction.showToast({message:data.data.message})
    //关闭添加商品规格的面板
    this.isShowPanel = false
  }

二 、立即购买

同上的原理,当点击立即购买的按钮的时候,判断是否登录。

登录了,那么就发送请求。没登录,跳转登录页。


总结

我们首先在登录页:当用户完成登录时,后台会返回一个Token给我们,这个Token是后面接口所需要的参数,我们用首选项进行存储起来。

当用户点击加入购物车按钮或者立即购买按钮的时候,我们需要先判断是否有Token值存在,如果存在我们就正常向后台发送请求;不存在的话那么需要用户登录获取Token,才能操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值