在提供角度模块或组件时,将变量注入管道



这是我的自定义管道

import { Pipe, PipeTransform } from '@angular/core';
import { LanguageFile } from './files/language';
@Pipe({
name: 'lang'
})
export class NgxTogetherLanguageTranslatorPipe implements PipeTransform {
language: any;
constructor() {
this.language = LanguageFile.language;
}
transform(value: string, falg = "fa"): string {
if (typeof (value) != typeof ('x1'))
return value;
let key = value ? value.toLowerCase() : value;
if (sessionStorage.getItem('languageFlag'))
falg = sessionStorage.getItem('languageFlag') || falg;
if (window && falg == "fa")
return this.language[key] ? (this.language[key].fa || value) : value;
else
return this.language[key] ? (this.language[key].en || value) : value;
}
}

当我将LanguageFile上的另一个文件或变量提供到模块中时,我是否可以覆盖它?

我已经为这个管道创建了一个库,我想在多个项目中使用它,我的挑战是想要使用不同的文件这是文件内容:

export class LanguageFile {
public static language = {
"cancel": { "fa": "لغو", "en": "Cancel" },
"ok": { "fa": "تایید", "en": "OK" },
}
}

是的,您可以使用InjectionToken来实现这一点。

基本上,您可以创建令牌

const LANGUAGE = new InjectionToken<string>('language');

并且在父级上提供您想要在管道中使用的值(父级-内部有管道的模块或组件(

如果您知道要在编译时使用的值,您可以使用类似的东西

{providers: [{provide: LANGUAGE, useValue: LanguageFile.language}] 

如果你需要在运行时使用一些逻辑,你可以使用useFactory代替

最后,只需像一样在管道中注入价值

constructor(@Inject(LANGUAGE) private language: string) {}

相关内容

  • 没有找到相关文章

最新更新