目标:如果用户在移动设备上,则需要在mat-card-title上方移动div(具有mat-select下拉菜单)。如果它们不在移动设备上,那么我想将其保留在原处(在mat-card-title的右边)
我尝试过的事情:
问题: 我收到错误TS2339:类型“ HTMLElement”以及“ HTMLTextAreaElement”上的属性“ before”不存在
根据Property 'value' does not exist on type 'HTMLElement' for Textarea - Angular,我尝试了多种变型方式来铸造这些变量 但是它们都不起作用。
不确定从这里去哪里?
HTML :
<div class="title-container">
<mat-card-title id="signInTitle" class="text-center" i18n="@@MoVeSeLo_H1_1">
Please Sign In
</mat-card-title>
<div id="langDropDown">
<div *ngIf="(_lang_switch_controls)">
<form [formGroup]="_siteForm">
<mat-form-field class="language-field" appearance="outline">
<mat-select (selectionChange)="changeSite($event)" [value]="languages[i].value">
<mat-option *ngFor="let language of languages" [value]="language.value">
{{language.viewValue}}
</mat-option>
</mat-select>
</mat-form-field>
</form>
</div>
</div>
</div>
TypeScript :
const signInTitle = <HTMLTextAreaElement>document.getElementById("signInTitle");
const langDropDown = <HTMLDivElement>document.getElementById("langDropDown");
var uagent = navigator.userAgent.toLowerCase();
if (uagent.match(/iPad|iPhone|android/)) {
signInTitle.before(langDropDown);
}
答案 0 :(得分:1)
HtmlElement
等在打字稿dom lib中定义。
您至少需要为这些元素使用打字稿3.1.1来实现ChildNode
接口(定义了before
方法)。
如果您无法更新打字稿,则可以使用insertBefore
甚至是Renderer2的角度服务来操作DOM元素