Vue前端商品的添加收藏,删除收藏以及清空收藏的操作(基于vant-ui)

Vue前端商品的添加收藏,删除收藏以及清空收藏的操作


1. 添加收藏

  • 达到的效果:效果就是在商品详情页点击收藏的时候收藏的那个icon高亮变为红色,同时呢,向后台传输收藏商品的数据,使用户在“我的收藏”列表里面可以看到这个商品;当然了,在初始化页面的时候我们要先写一个方法判断一下这个用户是否已经收藏这个商品,如果已经收藏了,这里的icon在初始化的时候就应该是红色。
    在这里插入图片描述在这里插入图片描述
  • **html:**这里我是用了vant-ui的一个底部组件van-goods-action,做了大改,部分代码如下:
	  <div class="ACTION">
          <van-goods-action >
          //收藏按钮,绑定一个爱心的icon、绑定颜色likecolor、绑定点击事件like
            <van-goods-action-icon icon="like-o"  @click="like" :color="likeColor" text="收藏"/>
            <van-goods-action-icon icon="cart-o" @click="goCar" :info="cartCount" text="拼的车"/>
            <van-goods-action-button type="warning" text="加入拼的车" @click="addCar" />
            <van-goods-action-button type="danger" text="立即拼" @click="onDeal" />
          </van-goods-action>
      </div>
  • script
export default {
  data () {
    return {
      ifLike:false,
      likeColor:'black',
      likeList:[],
      token:'',
      jobId:''
    }
  },
  methods:{
    //初始化页面时判断是否已收藏,向后端请求获取一下收藏列表
    init(){
      this.$axios({
        method: 'get',
        url: '/job/list',
        headers: {
            'Content-Type': "application/json;charset=UTF-8",
            'Authorization': 'Bearer ' + this.token,
        },
        params: {
          wid:this.jobId
        }
      })
      .then(res=>{                    //请求成功后执行函数
        if(res.data.code === 0){
          //把收藏列表放进空数组likelist[]
          var res = res.data.data;
          this.likeList=res
          //对获取的收藏列表数组likelist进行遍历,再用if语句看列表里面是否有id跟本页面商品id一样的元素
          this.likeList.forEach(item=>{
          //用if语句看列表里面是否有id跟本页面商品id一样的元素
            if(item.id==this.jobId){
            //如果有,改变下icon的颜色
                this.likeColor='red';
                this.ifLike = true;
                console.log("已收藏");
            }
          })
        }else{
          console.log("err")
        }
      })
      .catch(err=>{                   //请求错误后执行函
        console.log("请求错误")
      })
    },
        
        //点击收藏事件,向后台数据库插入一条新数据
    like() {
        if(this.ifLike === false) {
        	this.$axios({
        	method: 'post',
        	url: '/job/insert',
        	headers: {
            	'Content-Type': "application/json;charset=UTF-8",
            	'Authorization': 'Bearer ' + this.token,
        	},
        	params: {
          		wid:this.jobId
        	}
      		})
      	.then(res=>{                    //请求成功后执行函数
        	if(res.data.code === 0){
                this.likeColor='red';
                this.ifLike = true;
                console.log("收藏成功");
        	}else{
          		console.log("err")
        	}
      	})
      	.catch(err=>{                   //请求错误后执行函
        	console.log("请求错误")
      	})
        }
    },

    goCar(){
    	this.$router.push("/car");        
    },
    
    },
created(){
	this.token =  localStorage.getItem('token'),
    this.jobId = localStorage.getItem('jobId'),
    this.init()
 },
  components: {
    [GoodsAction.name]: GoodsAction,
    [GoodsActionIcon.name]: GoodsActionIcon,
    [Icon.name]: Icon,
    [GoodsActionButton.name]: GoodsActionButton,
  }
}

2. “我的收藏”页面收藏的删除与清空

  • 要达到的效果:点击单个item的删除按钮,页面快速删除,同时向后端发出请求删除数据库中的item。点击清空全部同样如此。
    在这里插入图片描述
    - html:
    //删除按钮,绑定点击事件,且附带两个参数,index是前端的索引,item.id是列表项的id
    <el-button type="primary" size="mini" @click="dellike(index,item.id)" round>删除</el-button>
	<div class="footer">
	//清空全部按钮,绑定事件clear
    	<el-button class="footer" type="primary" style="font-size:16px;font-family:'微软雅黑';width:100%" @click="clear" round>清空全部</el-button>
	</div>

- script:

<script>
export default {
  data () {
    return {
      List: [],
      token:''
    }
  },
  methods: {
    //清空全部
    clear(){
    //首先在前端快速让list变成空数组
        this.List=[];
        //请求后端数据库清空列表
        this.$axios({
        method: 'get',
        	url: '/job/clear',
        	headers: {
            	'Content-Type': "application/json;charset=UTF-8",
            	'Authorization': 'Bearer ' + this.token,
        	}
      	})
      .then(res=>{                    //请求成功后执行函数
        if(res.data.code === 0){
          console.log("清空成功")
        }else{
          console.log("清空失败")
        }
      })
      .catch(err=>{                   //请求错误后执行函
        console.log("请求错误")
      })
      },
      
     //单个item的删除  
    dellike(index,e){
      this.List.splice(index,1)//'1' 获取item的前台索引值,从这个索引值开始删除,1代表删除一个
      //请求后端数据库删除item
      this.$axios({
        method: 'get',
        url: '/job/remove',
        headers: {
            'Content-Type': "application/json;charset=UTF-8",
            'Authorization': 'Bearer ' + this.token,
        },
        params:{
          wid:e
        }
      })
      .then(res=>{                    //请求成功后执行函数
        if(res.data.code === 0){
          console.log("删除成功")
        }else{
          console.log("删除失败")
        }
      })
      .catch(err=>{                   //请求错误后执行函
        console.log("请求错误")
      })
    },
    //页面初始化时获取收藏列表
    getList() {
     this.$axios({
        method: 'get',
        url: '/job/list',
        headers: {
            'Content-Type': "application/json;charset=UTF-8",
            'Authorization': 'Bearer ' + this.token,
        }
      })
      .then(res=>{                    //请求成功后执行函数
        if(res.data.code === 0){
          //定义从后端获取的joblist
          var res = res.data.data
          this.List = res
          
          console.log("获取成功")
        }else{
          console.log("获取失败")
        }
      })
      .catch(err=>{                   //请求错误后执行函
        console.log("请求错误")
      })
    },
   //获取token
  created(){
        this.token =  localStorage.getItem('token')
        },
  mounted: function () {
      this.getList()
  },
}
</script>

本篇文章如有错的地方,欢迎在评论指正。喜欢在微信看技术文章,可以微信搜索「葫芦金水」,回复【Python】【前端基础】【vue开发】即可获得视频资源,回复【答辩PPT】【演讲PPT】即可获得超级实用PPT模板,还有更多资料,建议后台留言或者直接私信我。

另,如果觉得这本篇文章写得不错,有点东西的话,各位人才记得来个三连【点赞+关注+分享】。

  • 18
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue Vant-UIVue.js的一个移动端UI组件库,是一个轻量级的、高效的组件库,非常适合用于移动端前端开发。其中,Van-Uploader是Vant-UI的上传文件组件,允许用户将文件上传到服务器或第三方存储库。 在实现头像图片上传时,我们可以采用如下步骤: 1. 首先需要安装Vant-UI组件库。可以通过npm命令进行安装,输入如下代码:npm install vant --save 2. 在Vue项目中引入Vant-UI组件库。在main.js文件中写入如下代码:import Vant from 'vant' import 'vant/lib/vant-css/index.css' Vue.use(Vant) 3. 在需要使用上传头像的组件中引入Van-Uploader组件,并编写如下代码: <template> <van-uploader :show-upload="false" :before-read="beforeRead" :after-read="afterRead" > <van-icon name="photograph" /> </van-uploader> </template> <script> export default { data() { return { file: '' } }, methods: { beforeRead(file) { if (file.type !== 'image/jpeg' && file.type !== 'image/png') { this.$toast('请上传 JPG/PNG 格式的图片'); return false; } if (file.size > 500 * 1024) { this.$toast('图片大小不能超过 500KB'); return false; } }, afterRead(file) { this.file = URL.createObjectURL(file.file); } } } </script> 4. 上面的代码中,我们主要使用了Van-Uploader组件的before-read和after-read两个事件回调函数。before-read为上传文件之前的校验函数,例如判断文件类型和文件大小是否符合要求,这里我们限制了文件类型为JPG/PNG并且大小不能超过500KB。after-read则表示读取文件后的回调函数,我们将上传的文件读取为本地链接并保存到file属性中,以便进行后续处理。 5. 最后,将file属性传递给后端进行处理,例如将该链接保存到服务器或者上传到第三方存储库中。 总之,使用Van-Uploader组件可以轻松实现头像图片上传功能,同时也可以根据需求进行个性化的定制和扩展,是一个非常实用且易于使用的组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值