博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
angular 2 中可以注入接口吗?如何实现?
阅读量:6992 次
发布时间:2019-06-27

本文共 1571 字,大约阅读时间需要 5 分钟。

答:不能,因为TypeScript的接口是设计时的, JavaScript没有接口。 TypeScript代码​​从生成的JavaScript过程中消失。没有任何接口类型信息可供Angular在运行时查找。

有两个方案可以实现:

1、方案1:

最简单的解决方案就是定义一个实现接口的抽象类。通常,无论如何你都需要一个抽象类。

定义接口:

import {Role} from "../../model/role";export interface ProcessEngine {     login(username: string, password: string):string;     getRoles(): Role[];}

抽象类:

import {ProcessEngine} from "./process-engine.interface";export abstract class ProcessEngineService implements ProcessEngine {    abstract login(username: string, password: string): string;    abstract getRoles(): Role[];}

实现类:

import { Injectable } from '@angular/core';import {ProcessEngineService} from "./process-engine.service";@Injectable()export class WebRatioEngineService extends ProcessEngineService {    login(username: string, password: string) : string {...}    getRoles(): Role[] {...}}

定义provider:

@NgModule({      ...      providers: [        ...,        {provide: ProcessEngineService, useClass: WebRatioEngineService}      ]})

2、方案2:Angular的官方文档建议使用InjectionToken,类似于OpaqueToken。

Your interface and class:

export interface AppConfig {   apiEndpoint: string;   title: string;}export const HERO_DI_CONFIG: AppConfig = {  apiEndpoint: 'api.heroes.com',  title: 'Dependency Injection'};

Define your Token:

import { InjectionToken } from '@angular/core';export let APP_CONFIG = new InjectionToken
('app.config');

使用InjectionToken对象注册依赖项提供程序

providers: [{ provide: APP_CONFIG, useValue: HERO_DI_CONFIG }]

你可以通过@Inject装饰器将配置对象注入任何需要它的构造函数中:

constructor(@Inject(APP_CONFIG) config: AppConfig) {     this.title = config.title;}

转载地址:http://aibvl.baihongyu.com/

你可能感兴趣的文章
常见模块设计--权限管理(一)
查看>>
[Docker]容器镜像
查看>>
stl学习之模板
查看>>
元学习 - Learning How to Learn - 第一课:集中与发散思维
查看>>
一种具有细节保留功能的磨皮算法。
查看>>
排序算法7--选择排序--堆排序
查看>>
iOS开发规范&建议
查看>>
[原]如何为SqlServer2008数据库分配用户
查看>>
【leetcode】Basic Calculator III
查看>>
回归到jquery
查看>>
Visual Studio 2008常见问题
查看>>
【洛谷 P4254】 [JSOI2008]Blue Mary开公司(李超线段树)
查看>>
scrapy初体验 - 安装遇到的坑及第一个范例
查看>>
OC内存管理
查看>>
C#中Split用法
查看>>
3月6日 c#语言
查看>>
[LeetCode] Surrounded Regions, Solution
查看>>
MySQL系列:数据库基本操作(1)
查看>>
hdu1058(dp)
查看>>
android EditText与TextView几个常用的属性
查看>>