Angular:如何将字符串发送到注入服务?

2024-02-09

我创建了 CRUD 任务的通用服务,该服务通过 DI(依赖注入)使用 HttpClient,但我需要在服务的构造函数中通知另一个值,如何实现?

因为当我在类的构造函数中定义将使用 DI 使用 CRUD 服务时,无法将参数传递给构造函数

下面是服务

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { CrudInterface } from "@app/core/crud.interface";
import { environment } from "@env/environment";
import { Observable } from "rxjs/Observable";

@Injectable()
export class CRUD<T> implements CrudInterface<T>{
    
    endpoint: string;

    constructor(private http: HttpClient, routeDir: string){
        this.endpoint = `${environment.endpoint}/${routeDir}`;
    }
    
    getAll(): Observable<T[]> {
        return this.http.get<T[]>(`${this.endpoint}`);
    }

    get(id: number): Observable<T> {
        return this.http.get<T>(`${this.endpoint}/${id}`);
    }

    create(object: T): Observable<T> {
        return this.http.post<T>(`${this.endpoint}`, object);
    }

    update(object: T): Observable<T> {
        return this.http.put<T>(`${this.endpoint}`, object);
    }

    delete(id: number): Observable<any> {
        return this.http.delete<T>(`${this.endpoint}/${id}`);
    }

}
import { Usuario } from "@app/usuarios/model/usuario";
import { CRUD } from "@app/core/crud.service";

class TestCrudServide {

    constructor(
        /**
         * How to inform the parameter here?
         * in this case the endpoint (2nd parameter of the CRUD service)
         */
        private crudService: CRUD<Usuario>
    ){ }

    getAll(){
        this.crudService.getAll();
    }
}

UPDATE

利用 Sannon Aragão(感谢)提出的工厂概念解决方案,我创建了用于动态创建实例的服务提供者

https://angular.io/guide/dependency-injection#factory-providers https://angular.io/guide/dependency-injection#factory-providers

export class crudServiceProvider {

    static getProvider(routeDir: string) {
        return {
            provide: CRUD,
            deps: [HttpClient],
            useFactory: (dep) => {
                return new CRUD(dep, routeDir);
            }
        }
    }
}

在我的组件中

@Component({
  selector: 'app-revenda',
  templateUrl: './revenda.component.html',
  styleUrls: ['./revenda.component.css'],
  providers:[ crudServiceProvider.getProvider('/api/revenda') ]
})
export class RevendaComponent implements OnInit {

  constructor(
      private crudService: CRUD<Revenda>
    ) { }
    
    ngOnInit() {
      // now it's work with the correct path and type!
      this.crudService.get(1).subscribe(item => console.log(item));
    }
}

Filipe,来自您想要提供服务的模块:

{
provide: 'userService1',
deps: [ HttpClient ],
useFactory: (dep1 ) => {
    return new UserService( dep1, 'test');
  }
}

在您将使用该服务的组件中:

constructor( @Inject('userService1') private userService: UserService ) { }

在 CRUD API 中,您可以获取字符串形式的参数:

constructor( private http: HttpClient, private s: string) {
  console.log(s); // will print 'test'
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular:如何将字符串发送到注入服务? 的相关文章

随机推荐

  • 使用 dplyr::percent_rank() 计算组内的百分位数排名

    假设我有以下数据 id grpvar1 grpvar2 value 1 1 3 7 6 2 1 2 4 3 1 5 2 对于每个id 我想计算percent rank of its value在由组合定义的组内grpvar1 and grp
  • Windows ODBC 驱动程序 - 检索的表情符号数据呈现为?

    重复线程注释 我已经针对这个问题提出了类似的问题 通过 ODBC 连接检索的表情符号数据显示为问号 https stackoverflow com questions 58943772 emoji data retrieved via od
  • 聚合函数和其他列

    SQL 查询是否可以返回一些普通列和一些聚合列 like Col A Col B SUM 5 6 7 您应该使用按语句分组 http www w3schools com sql sql groupby asp GROUP BY 语句用于 与
  • 恢复活动时防止多次打开对话框

    在我的 Android 应用程序中 为了询问用户是否要恢复当前游戏 我在主游戏活动中显示一个对话框 显示 您要恢复当前游戏吗 是 否 问题是 如果我在不回答对话的情况下多次恢复此活动 那么我会收到几个对话 一个个对话 这显然不是我的目标 我
  • 如何将 XPath 与 AS3 结合使用并获得仍然引用 XMLDocument 对象的结果?

    我正在将 XML 字符串解析为 XMLDocument 对象 我想使用 XPath 技术搜索特定节点XPathQuery execQuery 此函数返回新的 XML 对象 这意味着我需要将其转换为不同的 XMLDocument 对象并丢失引
  • 升级到 Grails 2.4.4 的问题

    从 Grails 2 4 3 升级到 2 4 4 后 启动 Grails 应用程序时不断出现错误 完整的错误可以在这里阅读 http pastebin com UXQ34JKD http pastebin com UXQ34JKD 2014
  • javascript 的 Jquery 参数替代方案

    我需要转换以下类型字典 key1 value1 key2 value1 value2 to key1 value1 key2 即发布数据表格 我在 chrome 扩展中执行此操作 上面的表单数据字典由以下方式返回 chrome webReq
  • Facebook 无效范围错误

    我用 Rails 应用程序创建了一个 V2 3 的应用程序 4月30日前一切正常 现在我收到此错误 无效范围 offline access publish stream create event 朋友 活动 此消息仅向开发人员显示 用户 如
  • 如何判断虚拟地址在 ARM Linux 内核中是否具有有效映射?

    我想检查是否可以在不引发分段错误的情况下取消引用虚拟地址 我所说的虚拟地址不仅仅是不可信的用户空间地址 我也想检查内核虚拟地址 在 x86 Linux 内核中 可以使用 virt addr valid 函数来检查是否 虚拟地址具有有效的映射
  • std::launder 可用于将对象指针转换为其封闭数组指针吗?

    当前的标准草案 大概是 C 17 说 基本 化合物 4 http eel is c draft basic compound 4 注意 数组对象及其第一个元素不可进行指针互换 即使它们具有相同的地址 尾注 所以指向对象的指针不能reinte
  • 对 UTF-8 字符串进行排序?

    我的 std strings 以 UTF 8 编码 因此 std string 不切掉的地方是重音符号 出现在 z 后面 但它不应该出现在 z 后面 Thanks 如果您不需要字典顺序 这就是按字典顺序对 UTF 8 编码字符串进行排序的结
  • appsettings.json 文件不在 .net core 控制台项目中

    据我所知 net core 已将 app config 文件替换为 appsetting json 然而 这个文件似乎只是为 ASP net 项目添加的 事实上 它甚至在添加项目列表中不可用 我发现this https blog bitsc
  • 如何检测工作站锁

    我正在开发一个应用程序 并试图检测工作站何时被锁定 例如用户按下 Windows L 键 我知道锁定事件具有价值 WTS SESSION LOCK 0x7 但我不知道如何使用它 我在网上搜索过但一无所获 您应该使用SystemEvents
  • Rails - 带条件的 text_field 类

    我想根据条件给出一个 text field 类 有没有办法在 Rails 中做到这一点 I e 仅当发生某种情况时 我才需要 必需 该类 使用三元 condition then else 操作员 阅读起来并不
  • VS 2015:性能向导中禁用分析工具

    我想对应用程序的性能进行采样 但在尝试使用性能向导启动新的分析会话时 各种工具 例如 CPU 使用率和应用程序时间轴 不可用 我使用的是 Visual Studio 2015 专业版 该应用程序使用 ASP NET 5 RC1 并从 Kes
  • 自定义 Json(反)序列化?

    我正在将一些代码从 Net 移植到 python 有时 我们需要将任意复杂的 json 从一种格式转换为另一种格式 Eg Query Boolean Operator And Parameters Equal Name Bob Boolea
  • 打印 RDLC 报告而不显示 ReportViewer 控件

    我想知道是否可以发送 打印数据DataGridView直接到 rdlc 报告而不将其绑定到ReportViewercontrol 有许多关于将 dgv 数据绑定到报告查看器控件的线程 我不想创建另一个带有报表查看器控件的表单 而是使用带有数
  • 具有默认值的 readline

    我可以使用以下命令将用户输入限制为 5 个字符GNU 阅读线 https cnswww cns cwru edu php chet readline rltop html include
  • Angular 2+ 错误:找不到名称“gapi”

    基本上 当我调用 google Analytics api 获取核心报告数据时 我收到以下错误 它可以在我的本地主机服务器上运行 但是当我尝试部署该应用程序时 它对我来说失败了 请告知如何在 angular2 中导入 gapi 变量 非常感
  • Angular:如何将字符串发送到注入服务?

    我创建了 CRUD 任务的通用服务 该服务通过 DI 依赖注入 使用 HttpClient 但我需要在服务的构造函数中通知另一个值 如何实现 因为当我在类的构造函数中定义将使用 DI 使用 CRUD 服务时 无法将参数传递给构造函数 下面是