微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 SCAM 方法单组件角度模块将注入令牌传递给嵌套服务?

如何解决如何使用 SCAM 方法单组件角度模块将注入令牌传递给嵌套服务?

我一直在玩SCAM(单组件角度模块)方法,但在将注入令牌从父模块传递到子模块时遇到了问题。

我有一个 ScamService 注入了 httpClientbaseUrl

import { HttpClient,HttpClientModule } from '@angular/common/http';
import { Injectable,Inject,NgModule,ModuleWithProviders } from '@angular/core';
import { BASE_URL } from './injection.tokens';

@Injectable()
export class ScamService {
  constructor( @Inject(BASE_URL) private baseUrl,private httpClient: HttpClient ) {}

  public getData() {
    return this.httpClient.get(`${this.baseUrl}/rest-of-endpoint`);
  }
}

@NgModule({
  imports: [HttpClientModule]
})
export class ScamServiceModule {
  public static forRoot(baseUrl): ModuleWithProviders<ScamServiceModule> {
    return {
      ngModule: ScamServiceModule,providers: [{
          provide: BASE_URL,useValue: baseUrl
      }]
    };
  }
}

要向模块提供 BASE_URL 令牌,我需要创建返回 ModuleWithProviders 的静态方法。在那里我可以为令牌分配一个值。没关系。

接下来,我想在一个组件中使用该服务,所以我将ScamServiceModule导入到ScamComponentModule中:

import { Component,ModuleWithProviders,NgModule } from '@angular/core';
import { ScamService,ScamServiceModule } from './scam.service';

@Component({//...})
export class ScamComponent {
  constructor(private scamService: ScamService) {}
}

@NgModule({
  imports: [
    ScamServiceModule.forRoot(
      `The url I would like to pass is not in the environments,I need to take it from forRoot of ScamComponentModule`
    )
  ]
})
export class ScamComponentModule {
  public static forRoot(baseUrl): ModuleWithProviders<ScamComponentModule> {
    // how to tell ScamServiceModule what the value of baseUrl is?
  }
}

现在我需要为它提供基本网址。所以我应该调用 ScamServiceModule.forRoot('some-url')。如果我知道组件级别的网址就好了。

但是url需要通过ScamComponentModuleforRoot方法传递。

您对如何传递 baseUrl 有什么建议吗?

先谢谢你!

解决方法

该问题与 SCAM 方法无关。

这只是提供依赖关系。该问题的解决方案是在 Angular Providers 数组中使用 'deps' 属性以及 'provide' 和 'useValue'。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。