提问人:Doe 提问时间:11/25/2018 最后编辑:Gonçalo PeresDoe 更新时间:12/1/2018 访问量:295
为什么 Angular 7 会重置纵的元素文本内容
Why does Angular 7 resets manipulated element text content
问:
我只是 Angular 的新手,所以请对我“放轻松”。 我有一个用于 I18n 的通用 TypeScript 类,用于在运行时进行本地化更改(例如元素上的文本值)。我也在其他(非 Angular)项目中使用它。
如果我包含我自己的类来处理 i18n,它会相应地更改文本,但之后,在 angular core 中,它会将其更改回原始状态。为什么 angular 会这样做。它没有绑定?
代码如下:
<div *ngFor="let module of modules()" (mouseup)="route(module.key)" class="{{module.i18nKey}}">
<div><i class="{{module.iconClass}}"></i></div>
<div attr.data-i18n-key="{{module.i18nKey}}" data-i18n-module="module">!!!localize this!!!</div>
</div>
我很困惑。i18n 库添加了一个名为 data-i18n-translated 的属性,并将其设置为 true 并设置本地化文本。之后,Angular 将转换后的值重置为 false,并将文本设置为原始值!!对此进行本地化!!
为什么?我该如何防止这种情况?我根本没有更改 attr.data-i18n-key?
谢谢你的任何帮助。
答:
0赞
cyr_x
11/25/2018
#1
这是因为当角度变化检测启动时,它会重新创建由指令处理的 DOM 元素,而您的外部库并不知道这一点。ngForOf
第一个解决方案是将该选项用于您的指令,这将阻止 angular 重新创建 DOM 元素,除非函数返回的值发生变化。trackBy
ngForOf
模板:
<div *ngFor="let module of modules(); trackBy: trackByKey">
</div>
元件:
...
public trackByKey(index: number, value: any)
{
return value.i18nKey
}
...
另一种解决方案是,如果对组件运行了更改检测,则重新运行外部 i18n 解析器。
评论