【问题标题】:Angular Material outlined input and ngx-translateAngular Material 概述了输入和 ngx-translate
【发布时间】:2018-08-13 20:48:08
【问题描述】:

我有一个带有 Angular Material ^6.0.2 和 ngx-translate ^10.0.2 的 Angular 应用程序 ^6.0.0。

在我的应用程序中,我有一些外观为“outline”的垫子输入。每当我更改应用程序的语言时,输入标签都会与字段轮廓一起截断,如下面的屏幕截图所示。

如果我刷新页面,大纲将采用当前语言的宽度,并且按原样工作。

有没有什么方法可以在我更改语言时只刷新/重建输入,而无需刷新页面?

谢谢!

法文标签法线:

标签用英文轮廓截断:

【问题讨论】:

  • 请尽量提供相关示例代码,以便人们更好地帮助您
  • 您好奥马尔,感谢您的回复。我添加了问题的 stackblitz 示例:Stackblitz 该应用程序以英文启动。如果您单击右上角的 FR 按钮,然后选择输入,您将能够看到标签的问题。

标签: angular ngx-translate angular-material-6


【解决方案1】:

MatFormField 为此提供了一个函数 - updateOutlineGap()。您可以在使用超时更改语言后调用该函数:

模板:

<mat-form-field appearance="outline" #formField="matFormField">
    <mat-label>{{ 'search' | translate }}</mat-label>
    <input matInput placeholder="Favorite food">
</mat-form-field>

组件:

@ViewChild('formField') formField: MatFormField;

changeToFr() {
    this.translate.use('fr');
    setTimeout(() => this.formField.updateOutlineGap());
}

这是您在 Stackblitz 上更新的示例:https://stackblitz.com/edit/angular-material2-translate-issue-1uamsu

【讨论】:

  • 为什么是setTimeout、@g-tranter?确实,没有它就行不通。
  • 翻译功能是异步的,因此标签更改不会立即应用,因此在尝试使用标签计算轮廓间隙大小之前需要等待。
  • 感谢您的回复。我试过同步的东西,setTimeout 似乎也需要。知道为什么吗?一个example Slackblitz。你认为我应该打开一个问题吗?
  • 有时当你同步调用一个函数时,所产生的变化是异步的。当更改影响显示的内容时,在 Angular 中经常出现这种情况。
  • 为什么轮廓间隙会“自行修复”?您正在对如何以及何时计算轮廓间隙大小做出不正确的假设。当您调用更新函数时,计算是同步进行的。如果标签更改是异步的,则计算可能在标签实际更改之前发生,因此大小以旧标签为准。更改检测不会更新间隙大小,除非 DOM 不稳定(可能在初始化之后或外观更改时)。看看表单域源代码,你就会“信服”。证据就在布丁里。
猜你喜欢
  • 1970-01-01
  • 2019-02-09
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 2019-07-02
  • 1970-01-01
相关资源
最近更新 更多