跟着官网学 Vue - 依赖注入
2023-12-18 13:30:28
直接上代码
<!-- ParentComponent.vue -->
<template>
<div>
<p>父组件</p>
<p>来自父组件的消息: {{ message }}</p>
<ChildComponent />
</div>
</template>
<script>
import { provide, ref } from 'vue';
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent,
},
// 在Vue 3中,使用setup()函数是一种组织组件逻辑的方式。
// setup()函数是在组件实例创建之前调用的,它接收props和context作为参数。
// 通过setup()函数,我们可以设置响应式数据、计算属性、提供/注入依赖等。
setup() {
// 使用 ref 创建响应式数据
const message = ref('你好,来自父组件的消息!');
// 使用 provide 提供数据给子孙组件
provide('message', message);
// 返回数据,以便在模板中使用
return {
message,
};
},
};
</script>
<!-- ChildComponent.vue -->
<template>
<div>
<p>子组件</p>
<GrandchildComponent />
</div>
</template>
<script>
import GrandchildComponent from './GrandchildComponent.vue';
export default {
components: {
GrandchildComponent,
},
};
</script>
<!-- GrandchildComponent.vue -->
<template>
<div>
<p>孙子组件</p>
<p>来自父组件的消息: {{ injectedMessage }}</p>
</div>
</template>
<script>
import { inject } from 'vue';
export default {
setup() {
// 使用 inject 获取来自父组件的数据,如果没有提供则使用默认值
const injectedMessage = inject('message', '默认消息');
// 返回注入的数据,以便在模板中使用
return {
injectedMessage,
};
},
};
</script>
在这个案例中,ParentComponent
使用 provide
提供了一个名为 'message'
的数据给其子孙组件。ChildComponent
作为子组件,可以直接访问 ParentComponent
提供的数据,而不需要通过 props
层层透传。在 GrandchildComponent
中,通过 inject
可以获取到来自 ParentComponent
的数据。
依赖注入不难想到Spring Boot的依赖注入,那?
Vue 中的 provide
和 inject
:
-
手动传递: 在 Vue 中,通过
provide
提供数据,然后通过inject
注入依赖。这种注入是显式的,需要在组件之间手动传递。// 提供 provide('message', 'Hello from parent'); // 注入 const message = inject('message');
-
组件层级: Vue 的
provide
和inject
是基于组件层级的,提供者组件提供数据,而消费者组件注入依赖。这种关系是通过组件树的层级结构建立的。
Spring Boot 中的依赖注入:
-
自动装配: 在 Spring Boot 中,依赖注入是自动完成的,不需要手动传递。Spring Boot 使用
@Autowired
或构造函数注入等方式,自动将依赖注入到需要的地方。// 通过 @Autowired 注入依赖 @Autowired private MyService myService;
-
容器管理: Spring Boot 中的依赖注入是由 Spring IoC 容器进行管理的。容器负责创建和管理对象,以及将它们注入到其他对象中。
区别和共同点:
- 显式 vs 隐式: Vue 的
provide
和inject
是显式的,需要手动提供和注入;而 Spring Boot 的依赖注入是隐式的,通过注解和容器自动完成。 - 语言差异: Vue 使用 JavaScript/TypeScript,而 Spring Boot 使用 Java。因此,语法和实现细节会有所不同。
- 依赖关系建立方式: Vue 依赖关系是通过组件树的层级结构建立的,而 Spring Boot 依赖注入是通过注解和容器管理建立的。
虽然具有一些差异,但两者都是实现依赖注入的方式,都有助于解耦组件或类之间的关系,提高代码的可维护性和可测试性。
文章来源:https://blog.csdn.net/qq_43116031/article/details/135048100
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!