Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度DI:注入具有多个参数值的服务 介绍_Javascript_Angular_Typescript_Dependency Injection_Frontend - Fatal编程技术网

Javascript 角度DI:注入具有多个参数值的服务 介绍

Javascript 角度DI:注入具有多个参数值的服务 介绍,javascript,angular,typescript,dependency-injection,frontend,Javascript,Angular,Typescript,Dependency Injection,Frontend,我正在为一个Angular项目编写一些服务,如果我试图遵循良好的实践(比如可靠的原则)来避免耦合和依赖抽象的话 对于其中一个服务,我定义了以下接口: 接口浏览器消息通道{ postMessage(message:T):无效; onMessage$():可观察; close():void; } 这个浏览器消息通道仅仅是一个抽象,它隐藏了实现细节,即拥有一个共享的消息空间,在不同的选项卡中打开的应用程序可以使用该空间彼此通信。此API还将使用可观察对象,以便客户端可以订阅新消息 实施 这项服务可以

我正在为一个Angular项目编写一些服务,如果我试图遵循良好的实践(比如可靠的原则)来避免耦合和依赖抽象的话

对于其中一个服务,我定义了以下接口:

接口浏览器消息通道{
postMessage(message:T):无效;
onMessage$():可观察;
close():void;
}
这个浏览器消息通道仅仅是一个抽象,它隐藏了实现细节,即拥有一个共享的消息空间,在不同的选项卡中打开的应用程序可以使用该空间彼此通信。此API还将使用可观察对象,以便客户端可以订阅新消息

实施 这项服务可以通过多种方式实现,但我决定利用下面的功能:

类BcBrowserMessageChannel实现BrowserMessageChannel{ 私人信息:主题; 构造函数(专用广播频道:广播频道){ this.setUpOnMessage(); } postMessage(message:T):无效{ this.broadcastChannel.postMessage(消息); } onMessage$():可观察{ 返回此.onMessage; } close():void{ this.broadcastChannel.close(); this.onMessage.complete(); } 私有setUpOnMessage():void{ this.onMessage=新主题(); this.broadcastChannel.onmessage=({data}:{data:T})=>{ this.onMessage.next(数据); }; } } 只要需要
浏览器消息频道
,我们就会在引擎盖下提供一个特定的实现:

@NgModule({
供应商:[{
提供:BrowserMessageChannel,
useClass:BcBrowserMessageChannel
}]
})
类通信模块{
}
角度框架内的问题
BroadcastChannel
对象必须传递到
BcBrowserMessageChannel
的构造函数中,频道名称(字符串)也必须传递到
BroadcastChannel
的构造函数中。在纯TypeScript代码中,如下所示:

const bc:BroadCastChannel=新的广播频道(channelName);
常量通道:BrowserMessageChannel=新的BcBrowserMessageChannel(bc);
如何在角度解中拟合这种情况

如何使用框架的依赖项注入机制来实现这一点,其中以下内容是不够的:

@组件({
...
})
类MyComponent{
构造函数(专用browserMessageChannel:browserMessageChannel){
//在我的场景中,我需要指定一个通道名来
//BrowserMessageChannel,所以在这个组件中我可以发布消息和
//订阅那个特定版本中的新版本
}
}