Popup 弹层

底层弹层组件,主要用于基于此组件实现上层组件封装,只提供了基础功能:指定类型、是否有背景层、显示内容(HTML)以及是否居中。

内置弹层类组件基本都是基于此组件实现,包括:ToastPickerCascadePickerDatePickerTimePickerSegmentPickerDialogActionSheet

注: 以上组件都是基于 create-api 实现,所以在使用之前,请确保自己了解过 create-api

示例

组件

基本用法

  1. <cube-popup type="my-popup" ref="myPopup">
  2. My Popup Content 1
  3. </cube-popup>
  4. <cube-button @click="showPopup('myPopup')">
  5. Show Popup
  6. </cube-button>

指定类型 type,这样方便根据类型做 class 控制,如示例,会在根元素上会增加 cube-my-popup 的 class

  1. export default {
  2. methods: {
  3. showPopup(refId) {
  4. const component = this.- refs[refId]
  5. component.show()
  6. setTimeout(() => {
  7. component.hide()
  8. }, 1000)
  9. }
  10. }
  11. }

组件默认是隐藏的,需要调用组件实例的 show() 方法才会显示,调用组件实例的 hide() 方法隐藏,这里的 showPopup() 就是做的这件事情(首先显示,1 秒钟后隐藏)

不要背景层

  1. <cube-popup type="my-popup" :mask="false" ref="myPopup2">
  2. My Popup Content 2
  3. </cube-popup>
  4. <cube-button @click="showPopup('myPopup2')">
  5. Show Popup - no mask
  6. </cube-button>

设置 mask 为 false,即不显示背景层

显示内容 HTML

  1. <cube-popup type="my-popup" :mask="false" content="<i>My Popup Content 3</i>" ref="myPopup3">
  2. <cube-button @click="showPopup('myPopup3')">
  3. Show Popup - with content
  4. </cube-button>

只需要传入 content,内容是一段 HTML 片段

控制位置&蒙层点击隐藏1.9.6

  1. <cube-popup type="my-popup" :position="position" :mask-closable="true" ref="myPopup4">My Popup Content 4</cube-popup>
  2. <cube-button @click="showPopup">top/right/bottom/left/center</cube-button>
  1. const positions = ['top', 'right', 'bottom', 'left', 'center']
  2. let cur = 0
  3. export default {
  4. data() {
  5. return {
  6. position: ''
  7. }
  8. },
  9. methods: {
  10. showPopup() {
  11. this.position = positions[cur++]
  12. if (cur === positions.length) {
  13. cur = 0
  14. }
  15. const component = this.- refs.myPopup4
  16. component.show()
  17. setTimeout(() => {
  18. component.hide()
  19. }, 2000)
  20. }
  21. }
  22. }

可通过 position 控制内容出现位置,通过 mask-closable 控制点击蒙层是否关闭。

上层封装

  1. <template>
  2. <cube-popup type="extend-popup" ref="popup">
  3. <div class="cube-extend-popup-content" @click="hide">
  4. <slot>{{content}}</slot>
  5. </div>
  6. </cube-popup>
  7. </template>
  8. <script type="text/ecmascript-6">
  9. const COMPONENT_NAME = 'cube-extend-popup'
  10. export default {
  11. name: COMPONENT_NAME,
  12. props: {
  13. content: {
  14. type: String
  15. }
  16. },
  17. methods: {
  18. show() {
  19. this.- refs.popup.show()
  20. },
  21. hide() {
  22. this.- refs.popup.hide()
  23. this.- emit('hide')
  24. }
  25. }
  26. }
  27. </script>
  28. <style lang="stylus" rel="stylesheet/stylus">
  29. .cube-extend-popup
  30. .cube-extend-popup-content
  31. padding: 20px
  32. color: #fff
  33. background-color: rgba(0, 0, 0, .8)
  34. </style>

这样就实现了一个上层封装的 CubeExtendPopup 组件,自带了一些样式,支持传入内容还有默认插槽,点击内容可隐藏。你可以这样使用(需要全局注册或者局部注册到使用的组件中):

  1. <cube-extend-popup content="click here hide" ref="extendPopup"></cube-extend-popup>
  2. <cube-button @click="- refs.extendPopup.show()">
  3. Show Extend Popup
  4. </cube-button>

Props 配置

参数 说明 类型 可选值 默认值
visible1.8.1 显示状态,是否可见。v-model绑定值 Boolean true/false false
type 弹层类型 String - ‘’
mask 是否显示背景层 Boolean true/false true
content 内容,HTML 字符串,在无插槽的时候有效 String - ‘’
center 是否水平垂直居中的 Boolean true/false true
position1.9.6 内容展示位置,优先级比 center 高 String top/right/bottom/left/center ‘’
maskClosable1.9.6 点击蒙层是否隐藏 Boolean true/false false

事件

事件名 说明 参数
mask-click 背景层点击 点击事件对象

实例方法

方法名 说明
show 显示
hide 隐藏

原文:

https://didi.github.io/cube-ui/#/zh-CN/docs/popup