menu/index.js

  1. /**
  2. * @component Menu
  3. * @description
  4. *
  5. * ## 菜单组件 / Menus组件
  6. *
  7. * ### 说明
  8. *
  9. * 注意:menu是全局的组件,应该在App.vue中定义,而不是在业务文件中。menu组件和nav组件应该是平级,放在最外层。 该组件用于在Vue.prototype.$menu上共享方法,可以用this.$menu来访问menu组件
  10. *
  11. * ### 关于事件
  12. *
  13. * Menus组件的事件是在$root中传播的, 切记
  14. *
  15. * ### 如何引入
  16. * ```
  17. * // 引入
  18. * import { Menu } from 'vimo'
  19. * // 安装
  20. * Vue.component(Menu.name, Menu)
  21. * // 或者
  22. * export default{
  23. * components: {
  24. * Menu
  25. * }
  26. * }
  27. * ```
  28. *
  29. * @props {string} id - 要打开menu的id,与open方法中的id对用应
  30. * @props {String} [side=left] - 从哪个方向打开 可选 left/right
  31. * @props {String} [type=overlay] - 用什么方式打开 可选 overlay/reveal
  32. *
  33. * @fires component:Menu#onMenuOpen
  34. * @fires component:Menu#onMenuClosing
  35. * @fires component:Menu#onMenuClosed
  36. *
  37. * @demo #/
  38. *
  39. * @usage
  40. *
  41. * <Menu id="menu" side="left" type="overlay"></Menu>
  42. *
  43. * var vm = new Vue();
  44. * vm.$menu.menuIns: 当前缓存的menu实例对象
  45. * vm.$menu.currentMenuId: 当前开启的menuId
  46. * vm.$menu.open('menuId'): 打开id为menuId1的menu
  47. * vm.$menu.close(): 关闭打开的menu
  48. * vm.$menu.toggle('menuId'): 如果开启则关闭, 如果没开启的则打开id为menuId1的menu
  49. *
  50. *
  51. *
  52. *
  53. */
  54. // 事件
  55. /**
  56. * @event component:Menu#onMenuOpen
  57. * @description menu开启事件, 传递menuId,可通过$root.$on()去监听。
  58. * @example
  59. * new Vue({
  60. * methods: {
  61. * open: function () {
  62. * this.$menu.open('aaa');
  63. * this.$events.$on("onMenuOpen", function () {
  64. * //...
  65. * })
  66. * }
  67. * }
  68. * })
  69. *
  70. */
  71. /**
  72. * @event component:Menu#onMenuClosing
  73. * @description menu触发关闭事件,正在关闭...,可通过$root.$on()去监听。
  74. */
  75. /**
  76. * @event component:Menu#onMenuClosed
  77. * @description menu关闭动画完毕,可通过$root.#on()去监听。
  78. */
  79. /**
  80. * menu.vue: Menu组件的模板文件, 方法只用于维护自身状态
  81. * menu.js: 组件全局安装及实例注册, 用于在Vue.prototype.$menu上共享方法
  82. *
  83. *
  84. * 页面文件这样使用:
  85. * this.$menu.menuIns: 当前缓存的menu实例对象
  86. * this.$menu.currentMenuId: 当前开启的menuId
  87. * this.$menu.open('menuId1'): 打开id为menuId1的menu
  88. * this.$menu.close(): 关闭打开的menu
  89. * this.$menu.toggle('menuId1'): 如果开启则关闭, 如果没开启的则打开 menuId1
  90. *
  91. * 对于menu模板的传参, 参考props
  92. *
  93. * 对外事件:
  94. * onMenuOpen: menu开启事件, 传递menuId
  95. * onMenuClosing: menu触发关闭事件,正在关闭...
  96. * onMenuClosed: menu关闭动画完毕
  97. *
  98. * */
  99. // function
  100. /**
  101. * @function open
  102. * @description
  103. * 如果在menu开启另一个menu, 则等到第一个的关闭promise之后再开启
  104. * @param {String} menuId - 打开menu的id,与上面属性中的id对应
  105. * @return {Promise}
  106. * @example
  107. * 下面只弹出id为aaa的menu
  108. *
  109. *
  110. * html:
  111. * <Menu id="aa"></Menu>
  112. * <Menu id="bb"></Menu>
  113. * js:
  114. * new Vue({
  115. * methods: {
  116. * open: function () {
  117. * this.$menu.open('aaa');
  118. * }
  119. * }
  120. * })
  121. */
  122. /**
  123. * @function close
  124. * @return {Promise}
  125. * @example
  126. *
  127. * new Vue({
  128. * methods: {
  129. * open: function () {
  130. * this.$menu.close();
  131. * }
  132. * }
  133. * })
  134. */
  135. /**
  136. * @function toggle
  137. * @param {String} menuId - 打开menu的id
  138. * @example
  139. * 下面只对id为aaa的menu有效果
  140. *
  141. * html:
  142. * <Menu id="aa"></Menu>
  143. * <Menu id="bb"></Menu>
  144. * js:
  145. * new Vue({
  146. * methods: {
  147. * open: function () {
  148. * this.$menu.toggle('aaa');
  149. * }
  150. * }
  151. * })
  152. */
  153. export { default } from './menu.vue'