【问题标题】:Angular Form: multiple hashtag display inside inputAngular Form:输入内显示多个主题标签
【发布时间】:2019-11-26 04:02:46
【问题描述】:

我正在使用 Angular CLI、Angular Material 表单和输入。我开发了一个表格来在里面添加一个新的标签。

我不知道如何显示已添加到输入中的每个主题标签。

这是我的代码:

form.component.html

<form [formGroup]="createItemForm">
    <fieldset>
        <div class="row">
            <div class="col-lg-6">
                <mat-form-field>
                    <input formControlName="hashtag" matInput placeholder="Challenge hashtag"/>
                    <button matSuffix mat-button (click)="isShow = !isShow">Hashtag</button>
                </mat-form-field>
                <mat-form-field *ngIf="isShow">
                    <input matInput placeholder="Add a hashtag" [(ngModel)]="task" [ngModelOptions]="{standalone: true}"/>
                    <button matSuffix mat-button (click)="onClick()">Add</button>
                </mat-form-field>
            </div>
        </div>
    </fieldset>
    <button mat-raised-button type="submit" (click)="createItems()" class="btn btn-primary pull-right"
    [disabled]="!createItemForm.valid">Create a new items</button>
</form>

form.component.ts

task: string;
tasks = [];
isShow = false;

onClick() {
   this.tasks.push({name: this.task, strike: false});
   this.task = '';
}

这是我想要实现的输出 UI

【问题讨论】:

标签: angular typescript angular-material


【解决方案1】:

只需将表单控件的值设置为您希望它显示的值。

onClick() {
   this.tasks.push({name: this.task, strike: false});
   this.task = '';
   this.createItemForm.get('hashtag').setValue(this.tasks.map(t => '#' + t).join(', '))
}

【讨论】:

  • 很抱歉回复晚了,感谢您的解决方案,效果很好。
【解决方案2】:

通过将“#”附加到表单控件来推送新的主题标签值

onClick() {
   this.tasks.push({'name': '#'+this.task, 'strike': false});
   this.task = '';
   this.createItemForm.controls.hashtag.setValue(this.tasks.reduce((a: string, t: any) => a.concat(t.name + ', '), ""));
}

【讨论】:

  • 感谢您的解决方案,很高兴知道使用相同方法 setValue 实现此要求的另一种方法
猜你喜欢
  • 2018-07-11
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2021-08-14
  • 2014-03-16
  • 1970-01-01
相关资源
最近更新 更多