Label.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <script>
  2. import commonMixin from '../base/mixins/common.js'
  3. import bindEvents from '../base/bindEvent.js'
  4. import {createPoint, createSize} from '../base/factory.js'
  5. export default {
  6. name: 'bm-label',
  7. render () {},
  8. mixins: [commonMixin('overlay')],
  9. props: {
  10. content: {
  11. type: String
  12. },
  13. title: {
  14. type: String
  15. },
  16. offset: {},
  17. position: {},
  18. labelStyle: {},
  19. zIndex: {
  20. type: Number,
  21. default: 0
  22. },
  23. massClear: {
  24. type: Boolean,
  25. default: true
  26. }
  27. },
  28. watch: {
  29. content (val) {
  30. this.originInstance.setContent(val)
  31. },
  32. title (val) {
  33. this.originInstance.setTitle(val)
  34. },
  35. 'offset.width' (val, oldVal) {
  36. const {BMap} = this
  37. if (val.toString() !== oldVal.toString()) {
  38. this.originInstance.setOffset(createSize(BMap, {width: val, height: this.offset.height}))
  39. }
  40. },
  41. 'offset.height' (val, oldVal) {
  42. const {BMap} = this
  43. if (val.toString() !== oldVal.toString()) {
  44. this.originInstance.setOffset(createSize(BMap, {
  45. width: this.offset.width,
  46. height: val
  47. }))
  48. }
  49. },
  50. 'position.lng' (val, oldVal) {
  51. const {BMap} = this
  52. const lng = val
  53. if (val.toString() !== oldVal.toString() && lng >= -180 && lng <= 180) {
  54. this.originInstance.setCenter(createPoint(BMap, {lng, lat: this.center.lat}))
  55. }
  56. },
  57. 'position.lat' (val, oldVal) {
  58. const {BMap} = this
  59. const lat = val
  60. if (val.toString() !== oldVal.toString() && lat >= -74 && lat <= 74) {
  61. this.originInstance.setCenter(createPoint(BMap, {lng: this.center.lng, lat}))
  62. }
  63. },
  64. labelStyle: {
  65. handler (val) {
  66. this.originInstance.setStyle(val)
  67. },
  68. deep: true
  69. },
  70. zIndex (val) {
  71. this.originInstance.setZIndex(val)
  72. },
  73. massClear (val) {
  74. val ? this.originInstance.enableMassClear() : this.originInstance.disableMassClear()
  75. }
  76. },
  77. methods: {
  78. load () {
  79. const {BMap, map, content, title, offset, position, labelStyle, zIndex, massClear, $parent} = this
  80. const overlay = new BMap.Label(content, {
  81. offset: createSize(BMap, offset),
  82. position: createPoint(BMap, position),
  83. enableMassClear: massClear
  84. })
  85. this.originInstance = overlay
  86. try {
  87. $parent.originInstance.setLabel(overlay)
  88. } catch (e) {
  89. map.addOverlay(overlay)
  90. }
  91. title && overlay.setTitle(title)
  92. labelStyle && overlay.setStyle(labelStyle)
  93. zIndex && overlay.setZIndex(zIndex)
  94. bindEvents.call(this, overlay)
  95. }
  96. }
  97. }
  98. </script>