Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Angular 2中的单例服务_Angular_Typescript - Fatal编程技术网

Angular 2中的单例服务

Angular 2中的单例服务,angular,typescript,Angular,Typescript,我对Angular 2上的单例服务有点困惑。我需要一个翻译服务在整个应用程序中,我希望只有一个实例的服务。我有两个按钮来切换语言。当我运行应用程序时,我使用一个管道来翻译内容,它可以工作,但开关按钮不工作。我收到一条错误消息: self.parent.context.use不是函数“” 我想这都是关于一些角度概念的误解,所以,有人能帮我正确地实现一个全局服务吗 //翻译服务 @可注射() 导出类TranslateService{ private _currentLang:string; 构造函

我对Angular 2上的单例服务有点困惑。我需要一个翻译服务在整个应用程序中,我希望只有一个实例的服务。我有两个按钮来切换语言。当我运行应用程序时,我使用一个管道来翻译内容,它可以工作,但开关按钮不工作。我收到一条错误消息:

self.parent.context.use不是函数“”

我想这都是关于一些角度概念的误解,所以,有人能帮我正确地实现一个全局服务吗

//翻译服务
@可注射()
导出类TranslateService{
private _currentLang:string;
构造函数(){
这个。_currentLang='es';
}
public-get-currentLang(){
把这个还给我;
}
公用(lang:string):无效{
//设置当前语言
这个。_currentLang=lang;
}
私有翻译(obj:LocalizedData):字符串{
//私人表演翻译
返回对象[this._currentLang];
}
公共即时(obj:LocalizedData){
//呼叫翻译
返回此.translate(obj);
}
}
//导航条模块
@NGD模块({
导入:[CommonModule,FormsModule],
声明:[NavbarMenuComponent,TranslatePie],
导出:[NavbarMenuComponent]
})
导出类NavbarModule{}
//应用程序组件
@组成部分({
选择器:“应用程序”,
模板:“”
})
导出类AppComponent实现OnInit{
公共翻译文本:字符串;
构造函数(){}
ngOnInit(){}
}
//应用程序模块
@NGD模块({
导入:[BrowserModule、FormsModule、NavbarModule],
声明:[AppComponent],
引导:[AppComponent],
提供者:[翻译服务],
})
导出类AppModule{}
//主要
const platform=platformBrowserDynamic();
bootstrapModule(AppModule,[TranslateService]);

在Angular2中,服务是每个提供商的单件服务。如果您多次提供服务,您将获得多个实例

如果你提供的是

@NgModule({ 
  providers: [SomeService]
  ...
})
然后它将在根范围中提供,您将获得整个应用程序的单个实例。即使在提供者中有多个
@NgModule()
包含服务,您也只能得到一个实例,因为它们被提升到应用程序根作用域中

延迟加载的模块有自己的根作用域


如果您在
@Component()
中提供服务,则每个这样的组件实例及其子实例将获得不同的服务实例。

在angular2中,默认情况下,所有服务都是单例的。从文档
Singleton服务。依赖项是注入器范围内的单例。
您应该提供一些运行说明,以精确查找位置,或者提供一个以
最小值为重点的依赖项。
。提供上述所有代码会给您的问题增加太多噪音。感谢您的回复!这是我从文档中不理解的,但是,如果我在根模块“AppModule”上提供服务,我如何在子模块和模板上调用该服务?我可以不在每个组件构造函数上注入服务就完成它吗?如果我只向根模块提供服务,我会得到相同的错误。提供只定义服务的范围。要使用它,您必须使用构造函数参数注入它。@GünterZöchbauer有没有办法避免在每个文件的顶部也写
从y导入x
?我希望将lodash作为一个全局变量。我自己并不积极使用它。你需要导入所有你使用的东西,没有办法。例如,你可以使用桶来简化一些,但它们也有自己的问题