File tree Expand file tree Collapse file tree 4 files changed +69
-3
lines changed Expand file tree Collapse file tree 4 files changed +69
-3
lines changed Original file line number Diff line number Diff line change 1
1
import type { App } from 'vue'
2
2
import Drawer from './src/drawer'
3
+ import DrawerService from './src/drawer-service'
3
4
4
5
Drawer . install = function ( app : App ) : void {
5
6
app . component ( Drawer . name , Drawer )
6
7
}
7
8
8
- export { Drawer }
9
+ export { Drawer , DrawerService }
9
10
10
11
export default {
11
12
title : 'Drawer 抽屉板' ,
12
13
category : '反馈' ,
13
- status : '50 %' ,
14
+ status : '60 %' ,
14
15
install ( app : App ) : void {
15
-
16
16
app . use ( Drawer as any )
17
+ app . config . globalProperties . $drawerService = DrawerService
17
18
}
18
19
}
Original file line number Diff line number Diff line change
1
+ import { createApp } from 'vue'
2
+ import { DrawerProps } from './drawer-types'
3
+ import Drawer from './drawer'
4
+
5
+
6
+ function createDrawerApp ( props : DrawerProps ) {
7
+ return createApp ( Drawer , { ...props } )
8
+ }
9
+
10
+ export default class DrawerService {
11
+
12
+ static $body : HTMLElement | null = document . body
13
+ static $div : HTMLDivElement | null = null
14
+ static drawer = null ;
15
+
16
+ static show ( props : DrawerProps ) : void {
17
+ this . $div = document . createElement ( 'div' )
18
+ this . $body . appendChild ( this . $div )
19
+ this . drawer = createDrawerApp ( props )
20
+ this . drawer . mount ( this . $div )
21
+ }
22
+
23
+ static hide ( ) : void {
24
+ this . drawer ?. unmount ( ) ;
25
+ this . drawer = null ;
26
+ if ( this . $div ) {
27
+ this . $body . removeChild ( this . $div )
28
+ }
29
+ this . $div = null
30
+ }
31
+
32
+
33
+ }
Original file line number Diff line number Diff line change @@ -5,6 +5,8 @@ import DrawerHeader from './components/drawer-header'
5
5
import DrawerContainer from './components/drawer-container'
6
6
import DrawerBody from './components/drawer-body'
7
7
8
+ import DrawerService from './drawer-service' ;
9
+
8
10
export default defineComponent ( {
9
11
name : 'DDrawer' ,
10
12
props : drawerProps ,
@@ -21,6 +23,7 @@ export default defineComponent({
21
23
}
22
24
23
25
const closeDrawer = async ( ) => {
26
+ DrawerService . hide ( )
24
27
const beforeHidden = props . beforeHidden ;
25
28
let result = ( typeof beforeHidden === 'function' ? beforeHidden ( ) : beforeHidden ) ?? false ;
26
29
if ( result instanceof Promise ) {
Original file line number Diff line number Diff line change @@ -127,6 +127,35 @@ export default ({
127
127
128
128
:::
129
129
130
+ ### 以服务的方式调用
131
+
132
+ ::: demo
133
+
134
+ ``` vue
135
+ <template>
136
+ <d-button @click="open()">click me</d-button>
137
+ </template>
138
+ <script>
139
+ import { defineComponent, ref, h } from 'vue'
140
+ export default defineComponent({
141
+ setup(props, ctx) {
142
+ const results = ref(null);
143
+ function open() {
144
+ this.$drawerService.show({
145
+ visible: true,
146
+ isCover: false,
147
+ });
148
+ }
149
+ return {
150
+ open,
151
+ }
152
+ }
153
+ })
154
+ </script>
155
+ ```
156
+
157
+ :::
158
+
130
159
### 参数及API
131
160
132
161
| 参数 | 类型 | 默认 | 说明 | 跳转 Demo |
You can’t perform that action at this time.
0 commit comments