首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular 项目中的可摇树依赖 - Tree-shakable dependencies

Angular 模块 (NgModules) 曾经是提供应用程序范围依赖项(例如常量、配置、函数和基于类的服务)的主要方式。...providedIn: ‘root’ 该选项将在根模块注入器中提供单例服务。...与 ‘root’ 选项值相比,使用此方法有两个不同之处: 除非已导入提供Angular 模块,否则无法注入单例服务。...+rv:11\.0/.test(navigator.userAgent), providedIn: 'root', }); 使用工厂提供程序时,providedIn 默认为“root”,但让我们通过保留它来明确...因为 Angular Material 提供了摇树服务,所以我们的应用程序包中只包含我们使用的服务。 Summary 我们已经研究了使用 tree-shakable 提供程序配置注入器的现代选项。

2.6K20

Angular 6+依赖注入使用指南:providedIn与providers对比

Angular 6为我们提供了更好的语法——provideIn,用于将服务注册到Angular依赖注入机制中。...在创建一个新的对象实例时,依赖注入系统将会提供依赖对象(称为依赖关系) - Angular Docs 我们的组件和服务都是类,每个类都有一个名为constructor的特殊函数,当我们想要在我们的应用程序中创建该类的对象...最佳实践 库 当处理开发库、实用程序或任何其他形式的可重用 Angular 逻辑时,providedIn: 'root'是非常好的解决方案。...这种方法可以防止我们将懒加载的服务注入应用程序的正常加载模块 使用providedIn: 'root' , 'root'将会正常工作,服务也会被正确捆绑,但是使用 providedIn: LazyServiceModule...总结 将 providedIn: 'root'用于在整个应用程序中作为单例可用的服务; 永远不要使用 providedIn:EagerLiymportedmodule,您不需要它,如果有一些非常特殊的用例

2.7K11
您找到你想要的搜索结果了吗?
是的
没有找到

Angular 依赖的测试和 Fake

这意味着在真实 Internet Explorer 11 浏览器中运行应用程序Angular 测试实用程序使我们能够伪造依赖项以进行测试。...+rv:11\.0/.test(inject(userAgentToken)), providedIn: 'root', }); 为了单独测试 Internet Explorer 11 标志提供程序...: 'root', }); 对于我们的第一个测试,我们将为 Navigator API 令牌提供一个假值,该令牌在工厂提供程序中用作用户代理字符串令牌的依赖项。...为了出于测试目的替换令牌提供程序,我们在 Angular 测试模块中添加了一个覆盖提供程序,类似于 Angular 模块自己的提供程序如何覆盖导入的 Angular 模块的提供程序。...Resolving dependencies using the inject function Angular 测试实用程序为我们提供了不止一种解决依赖关系的方法。

3.1K30

Angular依赖注入详解

能将不同的实现切换进来,提高程序灵活性。 统一管理依赖模块。...二、Angular中的依赖注入 Angular有自己的依赖注入框架,可以自动解析组件的依赖关系,避免了直接在组件中使用new一个服务的紧耦合方式。...@Injectable的作用有: 声明可注入性 启用依赖注入 设置服务作用域 AOT编译优化 @Injectable({ providedIn: 'root' // 设置为根作用域 }) export...@Injectable支持的提供商配置: providedIn - 指定服务的提供位置 useClass - 使用指定类作为服务提供商 useExisting - 别名一个现有的提供商 useFactory...- 通过工厂函数提供服务实例 deps - 为工厂函数指定依赖项 useValue - 使用静态值作为服务实例 @Injectable({ providedIn: 'root', useClass

18230

从编译后的代码,分析 Angular @Injectable 的工作原理

D @Injectable 装饰器与“providedIn”选项一起,意味着不应将服务添加到模块的提供者数组中。 答案是 B 和 D....Angular 带有自己的 DI 框架,并用于 Angular 应用程序的设计以增强其模块化和效率。 @Injectable() 是任何 Angular 服务定义的重要组成部分。...提供者帮助 DI 容器创建特定依赖项的实例。 在 Angular 中,使用令牌注册服务并将其传递给提供者可以通过两种不同的方式完成。 首先,可以使用特定的 @NgModule 注册服务。...这个提供者策略,通知 Angular 框架,可以通过 new 关键字来启动某个依赖项的实例。 @NgModule({ ......如果使用该令牌注册了服务,Angular 可以使用该令牌启动 MyService 并提供它创建的实例。

64630

Angular Provider 作用域

Services 是每个 Angular 应用程序的基本块之一。Service 是一个普通的 TypeScript 类,它也可以没有使用 @Injectable 装饰器。...providedIn: 'root', }) export class UserService { } 示例中 providedIn 的属性值 root 表示服务的作用域范围是根级作用域(AppModule...当你注册根级别的服务时,Angular 会创建一个单独的共享服务实例。如果在 @Injectable 元数据中注册服务,Angular 会在构建阶段自动剔除无用的服务,进而优化我们的应用程序。...因此当我们在跟模块中配置某个服务后,这个服务将在整个应用程序中可用。需要注意的是在非懒加载的特性模块中,如果我们也注册了同一个服务。在根模块和特性模块中是使用同一个服务实例,即服务是单例的。.../core'; @Injectable({ providedIn: "root" }) export class UserService { name = "semlinker"; changeName

1.8K20
领券