ngx-translate:消息显示时间太长
ngx-translate: messages take too long to be displayed
我们的解决方案中 ngx-translate/translateService 遇到了一些延迟问题。将它与某些 API 一起使用以显示 return 失败或成功消息时,有时需要很长时间才能显示消息。例如,在下面的示例中,在显示消息之前需要一些时间,让用户感觉 PIN 根本没有创建。有什么办法可以改善这种反应吗?
src/assets/i18n/pt.yaml
transaction:
createdCodeMsg: "Novo código gerado com sucesso:"
src/assets/i18n/en.yaml
transaction:
createdCodeMsg: "New PIN sucessfully created: "
src/app/tools/createPIN/create-pin.component.ts
import { TranslateService } from '@ngx-translate/core';
...
constructor(
private translateService: TranslateService,
private myServices: MyServices,
) {
// get messages not part of a template
this.subscription.push(
this.translateService.stream([
'transaction.createdCodeMsg',
]).subscribe(values => {
this.createdCodeMsg = values['transaction.createdCodeMsg'];
})
);
}
...
this.subscription.push(
this.myServices.createPIN(this.createData).subscribe(data => {
this.createDataResult = data;
const myPin = this.createDataResult.pin;
this.createdCodeMsg = this.createdCodeMsg + ' ' + myPin;
this.msgs.push( { severity: 'success', summary: this.createdCodeMsg } );
})
);
当前版本:
$ npm -v
5.8.0
Angular CLI: 1.7.4 Node: 8.4.0 OS: win32 x64 Angular: 5.2.4 ...
animations, cdk, common, compiler, compiler-cli, core, forms ... http,
platform-browser, platform-browser-dynamic, router
@angular/cli: 1.7.4 @angular/flex-layout: 5.0.0-beta.14
@angular-devkit/build-optimizer: 0.3.2 @angular-devkit/core: 0.3.2
@angular-devkit/schematics: 0.3.2 @ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.2 @schematics/angular: 0.3.2
@schematics/package-update: 0.3.2 typescript: 2.4.2 webpack: 3.11.0
我意识到问题是 angular 首先呈现 HTML。所以我用一个简单的渲染变量解决了这个问题,只要消息还没有准备好,它就不会被启用。同时应显示加载图标,以向用户反馈工作仍在进行中。
html:
<ng-container *ngIf="renderHTML; else elseTemplate">
<myTemplate></myTemplate>
</ng-container>
<ng-template #elseTemplate>
<div class="ui-table-loading ui-widget-overlay"></div>
<div class="ui-table-loading-content">
<i [class]="'fa fa-spin fa-2x ' + loadingIcon"></i>
</div>
</ng-template>
component.ts:
...
renderHTML = false;
constructor(
private translateService: TranslateService,
...
this.subscription.push(
this.myServices.createPIN(this.createData).subscribe(data => {
this.createDataResult = data;
const myPin = this.createDataResult.pin;
this.createdCodeMsg = this.createdCodeMsg + ' ' + myPin;
this.msgs.push( { severity: 'success', summary: this.createdCodeMsg } );
this.renderHTML = true;
})
);
我们的解决方案中 ngx-translate/translateService 遇到了一些延迟问题。将它与某些 API 一起使用以显示 return 失败或成功消息时,有时需要很长时间才能显示消息。例如,在下面的示例中,在显示消息之前需要一些时间,让用户感觉 PIN 根本没有创建。有什么办法可以改善这种反应吗?
src/assets/i18n/pt.yaml
transaction:
createdCodeMsg: "Novo código gerado com sucesso:"
src/assets/i18n/en.yaml
transaction:
createdCodeMsg: "New PIN sucessfully created: "
src/app/tools/createPIN/create-pin.component.ts
import { TranslateService } from '@ngx-translate/core';
...
constructor(
private translateService: TranslateService,
private myServices: MyServices,
) {
// get messages not part of a template
this.subscription.push(
this.translateService.stream([
'transaction.createdCodeMsg',
]).subscribe(values => {
this.createdCodeMsg = values['transaction.createdCodeMsg'];
})
);
}
...
this.subscription.push(
this.myServices.createPIN(this.createData).subscribe(data => {
this.createDataResult = data;
const myPin = this.createDataResult.pin;
this.createdCodeMsg = this.createdCodeMsg + ' ' + myPin;
this.msgs.push( { severity: 'success', summary: this.createdCodeMsg } );
})
);
当前版本:
$ npm -v 5.8.0
Angular CLI: 1.7.4 Node: 8.4.0 OS: win32 x64 Angular: 5.2.4 ... animations, cdk, common, compiler, compiler-cli, core, forms ... http, platform-browser, platform-browser-dynamic, router
@angular/cli: 1.7.4 @angular/flex-layout: 5.0.0-beta.14 @angular-devkit/build-optimizer: 0.3.2 @angular-devkit/core: 0.3.2 @angular-devkit/schematics: 0.3.2 @ngtools/json-schema: 1.2.0 @ngtools/webpack: 1.10.2 @schematics/angular: 0.3.2 @schematics/package-update: 0.3.2 typescript: 2.4.2 webpack: 3.11.0
我意识到问题是 angular 首先呈现 HTML。所以我用一个简单的渲染变量解决了这个问题,只要消息还没有准备好,它就不会被启用。同时应显示加载图标,以向用户反馈工作仍在进行中。
html:
<ng-container *ngIf="renderHTML; else elseTemplate">
<myTemplate></myTemplate>
</ng-container>
<ng-template #elseTemplate>
<div class="ui-table-loading ui-widget-overlay"></div>
<div class="ui-table-loading-content">
<i [class]="'fa fa-spin fa-2x ' + loadingIcon"></i>
</div>
</ng-template>
component.ts:
...
renderHTML = false;
constructor(
private translateService: TranslateService,
...
this.subscription.push(
this.myServices.createPIN(this.createData).subscribe(data => {
this.createDataResult = data;
const myPin = this.createDataResult.pin;
this.createdCodeMsg = this.createdCodeMsg + ' ' + myPin;
this.msgs.push( { severity: 'success', summary: this.createdCodeMsg } );
this.renderHTML = true;
})
);