【发布时间】:2016-07-20 02:26:03
【问题描述】:
我有一个翻译管道,它接受一个字符串作为键,并从字典中返回翻译后的字符串。管道如下所示:
import {Pipe, PipeTransform} from 'angular2/core';
import {TranslateService} from './translate.service';
@Pipe({
name: 'translate',
pure: false
})
export class TranslatePipe implements PipeTransform {
constructor(private _translateService : TranslateService) {
}
transform(key: string): any {
var translatedText = this._translateService.resources[key];
if (translatedText)
return translatedText;
return key;
}
}
我在模板中这样使用管道:
<div>{{'login_EnterNewPassword'|translate}}</div>
这将在我的 HTML 中呈现如下:
<div>Please enter a new password</div>
到目前为止一切顺利!
TranslatePipe 依赖于 TranslateService,它包含一个名为资源的字典,其中包含当前语言的翻译。 TranslateService 的资源通过对服务器的 ajax http 调用加载,如果用户选择不同的语言,它可以在后台重新加载。
因为发生这种情况时我需要我的 UI 来更新所有文本,所以我将管道的 pure 属性设置为 false。
一切都很完美,但问题是,管道经常被执行,因为它不纯。如果用户输入 10 个字符的密码,则每次按下和按下时都会开始更改跟踪,并且管道会针对页面上所有不同的翻译文本执行数百次。
主要问题是:这是一件坏事,对整体性能有很大的负面影响吗???
或者是否有另一种方法可以强制 Angular 按需重新评估所有内容,例如仅在语言更改时??
【问题讨论】:
标签: angular typescript angular2-directives