输入时占位符不会消失
Placeholder will not disappear when typing
单击按钮时,应克隆 emails
的 class 元素。
HTML:
<form id="add-user">
<div class="email-container">
<div class="emails">
<mat-form-field class="email full-width">
<input matInput class="email-field" type="email" required placeholder="E-Mail">
</mat-form-field>
</div>
</div>
<i class="material-icons icon" id="addEmailField" (click)="clone()">add_box</i>
</form>
TS:
public clone(): void {
const clone = document.querySelector('.emails').cloneNode(true); // clone the selector .emails
document.querySelector('.email-container').appendChild(clone); // append it to .email-container
}
克隆部分有效,但问题是克隆元素的占位符。如果我在文本字段中输入内容,它不会消失。
这是我输入克隆元素时的样子:
我做错了什么? 运行 并测试它 here.
cloneNode()
克隆 DOM - 它不会克隆 Angular 对象。您必须以 "Angular" 方式克隆 Angular 组件。看到这个 post:.
使用 ng-template
创建模板解决了这个问题。每当单击按钮时显示模板,并在页面加载 ngOnInit()
.
时显示模板
HTML:
<form id="add-user">
<ng-template #email>
<mat-form-field class="email full-width">
<input matInput class="email-field" type="email" required placeholder="E-Mail">
</mat-form-field>
</ng-template>
<div #furtherEmails></div>
</form>
<i class="material-icons icon" id="addEmailField" (click)="clone()">add_box</i>
TS:
@ViewChild('email') email;
@ViewChild('furtherEmails', {read: ViewContainerRef}) furtherEmails;
public clone(): void {
this.furtherEmails.createEmbeddedView(this.email);
}
ngOnInit() {
this.clone();
}
您是否在 styles.css 中导入了 material 主题?
@import '@angular/material/prebuilt-themes/deeppurple-amber.css';
您可以将输入绑定到 ts 文件中的一个变量,然后改为创建一个 mat 占位符,并将输入字段的 ngModelChange 属性 绑定到一个函数,该函数将禁用或启用 mat 占位符。取决于输入字段是否为空。
HTML:
<mat-form-field class="email full-width">
<mat-placeholder *ngIf="showPlaceholder">E-mail</mat-placeholder>
<input matInput class="email-field" type="email" [(ngModel)]="email" (ngModelChange)="togglePlacholder()" required />
</mat-form-field>
TS:
email: string = ''
showPlaceholder: boolean = true
togglePlaceholder() {
if(this.email !== '') {
this.showPlaceholder = false
}else {
this.showPlaceholder = true
}
}
单击按钮时,应克隆 emails
的 class 元素。
HTML:
<form id="add-user">
<div class="email-container">
<div class="emails">
<mat-form-field class="email full-width">
<input matInput class="email-field" type="email" required placeholder="E-Mail">
</mat-form-field>
</div>
</div>
<i class="material-icons icon" id="addEmailField" (click)="clone()">add_box</i>
</form>
TS:
public clone(): void {
const clone = document.querySelector('.emails').cloneNode(true); // clone the selector .emails
document.querySelector('.email-container').appendChild(clone); // append it to .email-container
}
克隆部分有效,但问题是克隆元素的占位符。如果我在文本字段中输入内容,它不会消失。
这是我输入克隆元素时的样子:
我做错了什么? 运行 并测试它 here.
cloneNode()
克隆 DOM - 它不会克隆 Angular 对象。您必须以 "Angular" 方式克隆 Angular 组件。看到这个 post:
使用 ng-template
创建模板解决了这个问题。每当单击按钮时显示模板,并在页面加载 ngOnInit()
.
HTML:
<form id="add-user">
<ng-template #email>
<mat-form-field class="email full-width">
<input matInput class="email-field" type="email" required placeholder="E-Mail">
</mat-form-field>
</ng-template>
<div #furtherEmails></div>
</form>
<i class="material-icons icon" id="addEmailField" (click)="clone()">add_box</i>
TS:
@ViewChild('email') email;
@ViewChild('furtherEmails', {read: ViewContainerRef}) furtherEmails;
public clone(): void {
this.furtherEmails.createEmbeddedView(this.email);
}
ngOnInit() {
this.clone();
}
您是否在 styles.css 中导入了 material 主题?
@import '@angular/material/prebuilt-themes/deeppurple-amber.css';
您可以将输入绑定到 ts 文件中的一个变量,然后改为创建一个 mat 占位符,并将输入字段的 ngModelChange 属性 绑定到一个函数,该函数将禁用或启用 mat 占位符。取决于输入字段是否为空。
HTML:
<mat-form-field class="email full-width">
<mat-placeholder *ngIf="showPlaceholder">E-mail</mat-placeholder>
<input matInput class="email-field" type="email" [(ngModel)]="email" (ngModelChange)="togglePlacholder()" required />
</mat-form-field>
TS:
email: string = ''
showPlaceholder: boolean = true
togglePlaceholder() {
if(this.email !== '') {
this.showPlaceholder = false
}else {
this.showPlaceholder = true
}
}