Vue 可以通过依赖注入(DI)导入组件吗?



我使用了angularjs(1.x)和Vue的新内容.angular有DI,在控制器中引用服务或模板中的指令很容易,无论服务或指令在哪里。Angular将帮助您自动注入它。

但我意识到 Vue 通过import(ES6)组件所在的路径来引用组件。如果我在重构时(频繁)更改组件结构,则会丢失组件引用,我应该逐个修复路径。多麻烦啊。

我知道有像角度DI这样的vue-injector,但是如果它易于使用吗?

Vue 没有提供任何正式的依赖注入机制。如何导入依赖项完全取决于您。

大多数 Vue 代码示例根本不使用依赖注入,只是通过importexport使用 ES6 模块系统。

如果我在重构时(频繁)更改组件结构,则会丢失组件引用,我应该逐个修复路径。多麻烦啊。

您可能不应该经常更改目录结构。查看 Vue webpack 模板,了解如何正确构建 Vue 项目的示例。

话虽如此,它并没有真正回答你的问题。您是否正在使用 webpack(或类似的东西)?您可以通过解析配置属性精确配置 webpack 应如何定位模块,这样您就不必使用相对导入路径。

另一种方法是全局注册每个 Vue 组件,这样你根本不需要导入它们。

另一种方法是滥用 ES6 模块,例如创建一个components.js模块,该模块导入每个 Vue 组件(无论它们在哪里)并从该模块导出所有组件。现在,您只需要从该中央模块导入,而不是寻找要导入的每个内容的特定模块位置。

// components.js
import Button from 'path/to/button.vue';
import Alert from 'path/to/alert.vue';
export {
Button,
Alert,
};
// myform.js
import { Button } from 'path/to/components.js';

如果更改button.vue的位置,则只需从components.js文件内部更新导入。

如果您认为要进行大量重组,则可以拥有一个每个人都导入的文件,然后导入所有其他文件,这样您只需在一个地方进行更改。

我个人更喜欢导入而不是依赖注入,更容易理解所有内容的来源。

最新更新