首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Angular 6-创建(非根)模块作用域服务

Angular 6-创建(非根)模块作用域服务
EN

Stack Overflow用户
提问于 2018-05-09 09:01:45
回答 3查看 3.6K关注 0票数 4

据我所知,直到angular 6,所有的@Ngmodule提供程序都在根注入器上注册,并在主包中提供服务,即使只有延迟加载的模块使用它们。

唯一的例外是如果我们想要create a non singleton services in a component level

我想创建一个singleton服务,它只对特定模块可见(对根模块不可见),因此不会在迫切需要加载的主捆绑包中提供服务。

在saw中,在angular 6中,模块将不再需要通过“提供者”引用服务,而是服务现在将引用模块。

这可以通过@Injectable注释和provideIn属性来完成。

我没有找到一个好的、清晰的例子来说明如何添加一个不是“root”的模块名称,就像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Injectable({ provideIn: <MyLocalModule>})
export class SimpleServiceForLocalUseOnly { [] }

导入LazyLoaded模块并在上面的代码片段中将其写为"MyLocalModule“会导致循环依赖的警告。我可以通过将服务移动到其他模块来解决这个问题,但这样我就失去了最初的目的。

搜索的参考文献列表:

https://blog.angular.io/version-6-of-angular-now-available-cc56b0efa7a4

https://jaxenter.com/new-angular6-143995.html

https://www.ngdevelop.tech/angular-6-features/

https://blog.ninja-squad.com/2018/05/04/what-is-new-angular-6/

http://ankitsharmablogs.com/getting-started-with-angular-6-0/

https://www.youtube.com/watch?v=Xr5l7lT--YU

EN

回答 3

Stack Overflow用户

发布于 2018-05-09 09:25:48

如果我们根据official docs遵循此设置,则似乎存在一些关于循环依赖的问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Injectable } from '@angular/core';
import { HeroModule } from './hero.module';
import { HEROES }     from './mock-heroes';

@Injectable({
  // we declare that this service should be created
  // by any injector that includes HeroModule.

  providedIn: HeroModule,
})
export class HeroService {
  getHeroes() { return HEROES; }
}

您可以忽略由于Module、Service和Component之间的循环依赖而导致的编译器引发的警告。或者,回退到以前在Angular 5中使用的方法。

在延迟加载的模块中注册服务作为提供者,请注意,您不应该在根应用程序模块中导入延迟加载的模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@NgModule({
  imports: [
    RouterModule.forChild([{ path: '', component: LazyComponent }]),
  ],
  declarations: [
    LazyComponent
  ],
  providers: [YourServiceHere]
})
export class LazyLoadedModule { }
票数 2
EN

Stack Overflow用户

发布于 2018-08-27 14:09:06

要使用较新的语法在特定模块中提供服务,只需执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Injectable } from "@angular/core";
import { YourModule } from "path/to/your.module";

@Injectable({
    providedIn: YourModule
})
export class SomeModuleScopedService {}

参考:https://angular.io/guide/providers#providedin-and-ngmodules

票数 1
EN

Stack Overflow用户

发布于 2020-02-10 19:14:48

我通过创建一个只包含服务的中间模块来实现这一点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Injectable } from '@angular/core';
import { HeroServiceModule } from './hero.service.module';

@Injectable({
  providedIn: HeroServiceModule,
})
export class HeroService {
}

您在该模块中不需要太多内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@NgModule({
  imports: [ CommonModule ]
})
export class HeroServiceModule {}

然后您的常规模块导入服务模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@NgModule({
...
  imports: [
...
     HeroServiceModule
  ]
})
export class HeroModule {}

然后,您可以像往常一样延迟加载HeroModule。这消除了所有的循环依赖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50249404

复制
相关文章
Angular Provider 作用域
Services 是每个 Angular 应用程序的基本块之一。Service 是一个普通的 TypeScript 类,它也可以没有使用 @Injectable 装饰器。 比如下面是我们定义一个 UserService 类:
阿宝哥
2019/11/05
1.8K0
作用域、闭包、模块
当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前作用域的外面执行。
菜的黑人牙膏
2019/01/21
5390
JS入门难点解析6-作用域链
(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)
love丁酥酥
2018/08/27
6750
函数创建.作用域,自调用
ps:在函数外声明的变量作用域为全局变量,任何地方都可以使用             函数内部通过var声明的变量是局部变量,内部没有通过var创建的变量是全局变量             作用域不是全局变量的就是局部变量
十月梦想
2018/08/29
6440
【Python】包、模块、函数与变量作用域
文章目录 包 __init__ 注意包和模块的导入注意 引用 自动生成 一个py文件(模块)可以写多个类 包 必须要有__init__.py 包名 init init 导入,会自
瑞新
2020/07/07
3530
作用域与作用域链
通常来说,一段程序代码中所用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域scope。当一个方法或成员被声明,他就拥有当前的执行上下文context环境。在有具体值的context中,表达式是可见也都能够被引用。如果一个变量或者其他表达式不在当前的作用域,则将无法使用。作用域也可以根据代码层次分层,以便子作用域可以访问父作用域,通常是指沿着链式的作用域链查找,而不能从父作用域引用子作用域中的变量和引用。
WindRunnerMax
2020/08/27
1.9K0
java作用域-什么是JavaScript作用域、作用域链?
作用域、作用域链也是面试中出镜率很高的问题之一java作用域java作用域,同时也是中最重要的基础概念之一。
宜轩
2022/12/29
2K0
静态作用域和动态作用域
所谓作用域规则就是程序解析名字的方法。如果一个变量的名称不在当前作用域内,则这样的变量称为 unbound variable,例如有一个函数 (lambda () (+ a a)),a 就是一个 unbound variable,在当前作用域内我们无法找到这个变量。那么调用这个函数的求值结果是什么呢?显然要根据 context 来确定,对于 unbound variables 的解析,从解析的时机来划分,有两种规则,一种是「静态作用域」(Static Scope)也被称为「词法作用域」(Lexical Scope),另一种是「动态作用域」(Dynamic Scope)1。
zhiruili
2021/08/10
2.1K0
作用域、执行环境、作用域链
作用域,之前有介绍过,JavaScript无块级作用域,只有函数作用域,简单点说就是JavaScript的作用域就是函数作用域。因为有函数作用域,所以我们有全局作用域和局部作用域的说法。
wade
2020/04/23
1.5K0
JS作用域和作用域链
全局变量的作用域是全局性的,即在JavaScript代码中,该全局变量处处都有定义。
前端_AWhile
2019/08/29
4.1K0
JS作用域和作用域链
JavaScript作用域及作用域链
作用域 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript 采用词法作用域(lexical scoping),也就是静态作用域。 因为 JavaScript 采用的是词法作用域,函数的作用域在函数定义的时候就决定了。 而与词法作用域相对的是动态作用域,函数的作用域是在函数调用的时候才决定的。
青梅煮码
2023/03/02
1.5K0
JavaScript 作用域和作用域链
作用域就是变量与函数的可访问范围。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。
零式的天空
2022/03/02
1.7K0
函数作用域和块作用域
正如上一章讨论,作用域包含了一系列的“气泡”,每一个都可以作为容器,其中包含了标识符(变量、函数)的定义,这些气泡互相嵌套并且整齐地排列成蜂窝型,排列的结构是在写代码时定义的。
Karl Du
2020/10/23
2.4K0
java作用域-javaScript预编译、作用域,作用域链详解
  ES5中只分为全局作用域和函数作用域java作用域,也就是说for,if,while等语句是不会创建作用域的。ES6(let,const)除外。
宜轩
2022/12/29
1.4K0
四、作用域与作用域链
作用域与作用域链本应该是一个非常简单的概念。可是在近两年多的留言中,我发现这些概念反而成为了大多数人想不明白的点,而感到困惑的原因在于,别的文章里,常常会提到词法作用域,词法分析等概念,到底是什么东西?好像跟我说的有一点不一样,但又不知道哪里不对?
用户6901603
2020/07/25
1.5K0
JS作用域与作用域链
作用域就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。
剁椒鱼鳞
2023/05/30
1.6K0
JS作用域与作用域链
全局作用域、函数作用域、块级作用域的理解
ES6中新增的概念,在ES5中是没有的,ES5中没有? 没有的时候我们代码也写的好好的,现在新增的概念,我不用不行吗? 来,拋一个典型的问题出来,你就明白块级作用域出现的重要性了。
yuezhongbao
2019/02/26
3.1K0
全局作用域、函数作用域、块级作用域的理解
作用域
标识符的作用域有函数原型作用域、局部作用域(块作用域)、类作用域和 命名空间(namespace) 作用域
小飞侠xp
2022/05/13
9040
JS基础——作用域、作用域链
作用域 [[scope]],函数定义时自动生成的一个隐式属性,是用来存储函数作用域链 Scope Chain的容器。作用域链是用来存储函数执行上下文 AO和全局执行上下文 GO的容器。 函数被定义时,系统会为函数生成[[scope]],[[scope]]中保存该函数的作用域链,并从该作用域链的起始位置开始存储当前环境的作用域链。 函数被定义后&将要执行前会生成函数本身的AO,并将其插入作用域链的起始位置。 函数执行完毕,相应AO也会被销毁,等待下次执行时重新生成AO,如果函数内部嵌有其他
玖柒的小窝
2021/10/22
3.5K0
JS基础——作用域、作用域链
点击加载更多

相似问题

Angular JS根作用域

24

AngularJS服务根作用域

31

Angular无法访问根作用域

32

Angular2。加载根url的非根模块

15

Angular 6-路由到惰性模块的子模块不起作用

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文