angular - 我可以为翻译而不是管道创建指令吗?
问题描述
我正在创建一个翻译模块,翻译使用 PouchDB 存储在本地。而且我们有 2 个后备而不是只有一个,这使得最流行的翻译插件不兼容。
问题在于将管道设置为pure: false
会导致性能问题,但我找不到任何方法来强制管道在需要时工作而不是运行 onchange。
那么有没有办法通过指令来代替呢?
解决方案
您必须使用APP_INITIALIZER
Angular 提供的 APP_INITIALIZER 注入令牌是您参与 Angular 应用程序初始化过程以完成自己的工作的一种方式。
创建AppConfigService
从数据库加载翻译内容的内容。
@Injectable()
export class AppConfigService {
constructor(private translateService: TranslateService) {
}
public load() {
return new Promise((resolve, reject) => {
// TranslateService.getLocaleProperties => You can make use to load transaltion stuffs. This returns Observable.
this.translateService.getLocaleProperties().subscribe(
(response) => {
resolve(true);
},
(error) => {
console.error("The localization resources are not loaded.");
resolve(true);
});
});
}
}
在app.module.ts
,你做这些改变,
创建configLoad
工厂,该工厂具有调用加载方法的功能AppConfigService
。
export function configLoad(config: AppConfigService) {
return () => config.load();
}
在providers: []
数组中提供APP_INITIALIZER
{ provide: APP_INITIALIZER, useFactory: configLoad, deps: [AppConfigService], multi: true },
推荐阅读
- c# - VR Unity Raycast 只命中一个游戏对象,而不是另一个游戏对象
- c# - 尝试从 Entity Framework Core 中的实体加载单个子属性时出现异常
- javascript - 如何使用 axios 模拟假网址进行单元测试?
- python - Python,如果满足条件,则忽略步骤
- python-3.x - 如何切换姓氏和名字的顺序并删除逗号
- c# - 如何使用 C# 在 Ubuntu 上获取 GPU 信息?
- vue.js - Vue组件中的反应性依赖和非反应性依赖有什么区别?
- django - 使用 drf-yasg,如何使用静态模式和管理自定义权限?
- sql-server - 存储过程中的 T-SQL Merge 语句引发错误
- phpstorm - Remote hosts password file PhpStorm linux