<template>
<div class="sale-share-box">
<span class="sale-share-btn">
<van-popover class="sale-share-btn-pop"
style=" width: 104px;
height: 82px;
background: #FFFFFF;
box-shadow: 0px 0px 6px 0px rgba(153, 153, 153, 0.3);
border-radius: 8px;"
v-model:show="showPopover"
placement="top">
<div class="sale-share-bid" v-if="!isOnSale" @click="setClick()" value='bid'>Bid</div>
<div class="sale-share-sell" v-if="isOnSale" @click="setClick()" value='sell'>Sell</div>
<div class="sale-share-transfer" @click="setClick()" value='transfer'>Transfer</div>
<!-- <router-link class="sale-share-bid" v-if="isOnSale" :to="{path:'this.url?#saleOrbid'}">Bid</router-link>
<router-link class="sale-share-sell" v-if="isOnSale" :to="{path:'/myself?#transfer'}" >Sell</router-link>
<router-link class="sale-share-transfer" to="/myself" >Transfer</router-link> -->
<template #reference>
<img @click="showPop(id)" src="../../assets/create-img/icon_more.png" />
</template>
</van-popover>
</span>
</div>
</template>
<script>
export default {
props:{
showPopover: {
type:Boolean,
default:false
},
isOnSale: {
type:Boolean,
default:false
},
goodId: {
type:[Number, String],
default:0
}
}, methods: {
showPop() {
//this.showPopover = true;
this.$emit('showPop', this.goodId);
},
setClick(){
var url = '/myself/' + this.goodId ;
window.location.href = url;
}
}
}
</script>
<style lang="less" >
.sale-share-bid{
cursor: pointer;
}
.sale-share-sell{
cursor: pointer;
}
.sale-share-transfer{
cursor: pointer;
}
</style>
<style lang="less" >
.sale-share-btn-pop .van-popover__content{
display: flex;
flex-direction:column;
width: inherit;
height: inherit;
// align-items: center;
padding-left: 10px;
justify-content: space-around; }
</style>

一、

(1)在/Users/mac/nft/pc/src/components/目录下创建sections/SalePopover.vue(组件名称)

(2)组件代码:

<template>
  <div class="sale-share-box">
  <span class="sale-share-btn">
  <van-popover class="sale-share-btn-pop"
      style="width: 104px;
      height: 82px;
      background: #FFFFFF;
      box-shadow: 0px 0px 6px 0px rgba(153, 153, 153, 0.3);
      border-radius: 8px;"
      v-model:show="showPopover"
      placement="top">
  <router-link class="sale-share-bid" v-if="!isOnSale" to="/myself">Bid</router-link>
  <router-link class="sale-share-sell" v-if="isOnSale" to="/myself" >Sell</router-link>
  <router-link class="sale-share-transfer" to="/myself" >Transfer</router-link>
  <template #reference>
    <img @click="showPop(id)" src="../../assets/create-img/icon_more.png" />
  </template>
  </van-popover>
  </span>
</div>
</template>
<script>
export default {
  props:{
    showPopover: {
    type:Boolean,
    default:false
  },
  isOnSale: {
    type:Boolean,
    default:false
  },
  goodId: {
    type:[Number, String],
    default:0
  }
},
methods: {
  showPop() {
  //this.showPopover = true;
  this.$emit('showPop', this.goodId);
  }
  }
}
</script>
三、在script中引入
import SalePopover from '../../components/sections/SalePopover.vue'
四、在vue<script>中

export default {
  name: 'Items',
  components: {
    SalePopover //引用组件
  },
}
五、template中具体使用方法
<sale-popover :isOnSale="item.good.isOnSale" :goodId="item.good.id" @showPop="itempopClick"></sale-popover>
六、在method中写:
methods:{
itempopClick(e){
  console.log(e);
  this.showPopover1 = e;
},
七、效果图

vue-封装组件-结合vant实现点击按钮弹出泡泡(Popover)事件控制多个泡泡出现时,弹出对应的泡泡的更多相关文章

  1. vue封装组件的正确方式-封装类似elementui的组件

    最近读了下element的源码,仿照他封装了两种不同的组件. 第一种:通过组件来调用显示的 <template> <!--src/component/custom/main.vue- ...

  2. vue 封装组件

    props 接收数据 props对象里面 键值 是对改数据的 数据类型 的规定.做了规范,使用者就只能传输指定类型的数据,否则报警告 先根据要求写出完整的代码,再一一用参数实现组件封装 这里试着封装一 ...

  3. vue 封装组件上传img

    var _uploadTemplate = '<div>'+ '<input type="file" name="file" v-on:cha ...

  4. Vue.js组件间通信方式总结

    平时在使用Vue框架的业务开发中,组件不仅仅要把模板的内容进行复用,更重要的是组件之间要进行通信.组件之间通信分为三种:父-子:子-父:跨级组件通信.下面,就组件间如何通信做一些总结. 1.父组件到子 ...

  5. 从零开始学 Web 之 Vue.js(六)Vue的组件

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  6. VB.Net中点击按钮(Button)会重复提交两次表单

    在VB.NET程序开发过程中遇到一个问题 提交一个表单时,button的html代码如下 <asp:Button ID="btnSubmit" OnClick="c ...

  7. vue封装公用弹出框方法,实现点击出现操作弹出框

    vue封装公用弹出框方法,实现点击出现操作弹出框 如上图所示,这次要实现一个点击出现操作弹框的效果:并将这个功能封装成一个函数,便于在项目的多个地方使用. 具体思路是: 封装一个组件,组件保护一个插槽 ...

  8. Vue 爬坑之路(九)—— 用正确的姿势封装组件

    迄今为止做的最大的 Vue 项目终于提交测试,天天加班的日子终于告一段落... 在开发过程中,结合 Vue 组件化的特性,开发通用组件是很基础且重要的工作 通用组件必须具备高性能.低耦合的特性 为了满 ...

  9. seventBus(封装) 一个巧妙的解决vue同级组件通讯的思路

    如果在你项目中需要多处用到同级组件通讯,而又不想去写繁琐的vuex,可以参考这个小思路.本人在写项目中琢磨出来的,感觉挺好用,分享一下. 1.在utils文件夹下添加BusEvent.js 注释已经很 ...

  10. vue脚手架中使用Vant,实现自动按需引入组件,并将px转换为rem

    偶然间看到一款不错的移动端vue组件库Vant,照着官方文档敲了一下,感觉还是不错的.想着以后的项目中可能会运用到,特此记录下,方便之后使用. 现在很多的组件库为了减小代码包体积,都支持按需加载了.V ...

随机推荐

  1. jenkins 连接Windows

    1.Windows机器需要安装powershell Server 下载路径:https://www.nsoftware.com/powershell/server/ 点击startk开启该服务 2.配 ...

  2. 博客神器Gridea

    博客神器Gridea Gridea 温故而知新 Gridea 最早叫 Hve Notes ,开发者为了更易读和好记,重新命名为 Gridea,支持 Windows 和 Mac 平台,他的基础界面非常的 ...

  3. server配置,IDE,快捷键索引目录

    查看内存占用  ps -aux --sort -rss 查看是否运行某个进程,ps -aux | grep xxxxx 查看端口占用 netstat -tunlp | grep 6379 docker ...

  4. R7-3 汉诺(Hanoi)塔问题

    R7-3 汉诺(Hanoi)塔问题 分数 20 全屏浏览题目 切换布局 作者 张高燕 单位 浙大城市学院 古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小 ...

  5. nginx 编译安装支持 upload progress module, upload module

    下载地址: wiki.nginx.org/HttpUploadModule wiki.nginx.org/HttpUploadProgressModule 下载后解压至:/usr/src/文件夹下,其 ...

  6. python 根据二维数组画出彩色图像

    方法:采用seaborn中的heatmap import seabornimport numpy as npimport pandas as pdimport matplotlib.pyplot as ...

  7. Python学习笔记组织文件之用zipfile模块压缩文件

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  8. 2022.11.09 NOIP2022 模拟赛六

    科学 Source:CF461C Appleman and a Sheet of Paper,*2200. 注意到对于 \(p\le \lfloor \frac {now}{2}\rfloor\),直 ...

  9. [转]failed to recv data in handshakeReceive2Callback

    转自:http://xiaix.me/blog/27.html "failed to recv data in handshakeReceive2Callback"错误 一直用的好 ...

  10. 从URL中获取参数

    1.跳转测试页面  获取的url上的参数    <!doctype html> <html lang="en"> <head>     < ...