@@ -13,7 +13,7 @@ findService 负责从当前组件的子组件/子孙组件中查找指定的服
13
13
14
14
## 实现方案
15
15
16
- 可选的方案有如下 3 种:
16
+ 理论上可选的方案有如下 4 种:
17
17
18
18
方案 1:
19
19
@@ -36,7 +36,16 @@ this.component.getServiceFromChild(ChildServiceToken);
36
36
getServiceFromChild (ChildServiceToken , this .component );
37
37
```
38
38
39
- 最终确定的实现方案是方案 3,也就是` findService(token, component) ` 。
39
+ 方案 4:
40
+
41
+ ``` ts
42
+ // 这里的FIND_CHILD_SERVICE是本库提供的token
43
+ const findService = useService (FIND_CHILD_SERVICE );
44
+ const service = findService (ChildServiceToken );
45
+ ```
46
+
47
+ 最终确定的实现方案是方案 4,也就是首先利用 useService 获取 findService 工具方法,然后调用 findService 方法查找子组件的服务。
48
+ 这个访问的优点是不需要暴露 container 和 component,而且可以同时在组件内使用和服务中使用。
40
49
41
50
实现逻辑可以参考这里[ vuejs/test-utils#findComponent] ( https://github.com/vuejs/test-utils/blob/9c9659441c59de557f5844e5f9b7fee00b3938e0/src/baseWrapper.ts#L154 )
42
51
@@ -47,12 +56,12 @@ getServiceFromChild(ChildServiceToken, this.component);
47
56
``` vue
48
57
<script lang="ts" setup>
49
58
import { getCurrentInstance } from 'vue';
50
- import { findService , Token } from '@kaokei/use-vue-service';
59
+ import { FIND_CHILD_SERVICE , Token, useService } from '@kaokei/use-vue-service';
51
60
const token = new Token<ChildServiceType>('child service name');
52
- const component = getCurrentInstance();
53
61
54
62
function handleClickEvent() {
55
- const childService = findService(token, component);
63
+ const findService = useService(FIND_CHILD_SERVICE);
64
+ const childService = findService(token);
56
65
childService.doSomthing();
57
66
}
58
67
</script>
@@ -61,16 +70,13 @@ function handleClickEvent() {
61
70
场景 1:在服务中使用
62
71
63
72
``` ts
64
- import {
65
- Inject ,
66
- findService ,
67
- Token ,
68
- } from ' @kaokei/use-vue-service' ;
73
+ import { Inject , FIND_CHILD_SERVICE , Token , useService } from ' @kaokei/use-vue-service' ;
69
74
const token = new Token <ChildServiceType >(' child service name' );
70
75
71
76
class DemoService {
72
77
public handleClickEvent() {
73
- const childService = findService (token , component );
78
+ const findService = useService (FIND_CHILD_SERVICE );
79
+ const childService = findService (token );
74
80
childService .doSomthing ();
75
81
}
76
82
}
0 commit comments