【问题标题】:Open one key value at a time with click event Angular 8使用点击事件Angular 8一次打开一个键值
【发布时间】:2019-09-12 00:32:03
【问题描述】:

我有一个对象,我正在尝试设置(最终)编辑该对象中每个键值的能力,方法是打开一个带有切换的表单并通过一个小表单编辑该属性。

我尝试过使用密钥管道,但每个 k:v 的数据结构不同,因为不同的表有很多相关的东西。我应用了这个,认为我可以索引 k:v 并因此根据它的索引打开每个。也许我应该更多地研究这个?

首先,我需要让切换开关(*ngIf"=show_form" | openForm()) 工作,就像目前我单击一个按钮来显示 k:v 一样,所有按钮都会打开,因为条件设置为全线为真。

这是 HTML 的简化视图:

<li>App Body Font Family:</li>
<ul>
    <li>{{ config.body_font.data.font_family }}<li>
    <li><button (click)="openForm('body)">{{ button_text }}</button>
    <ng-container *ngIf="show_form">
        <li *ngIf="fonts">
        <span *ngFor="let font of fonts">
        {{ font.font_family }}//form will live here eventually as a select dropdown
        </span>
        </li>
    </ng-container>
</ul>
<li>App Headings Font Family:</li>
<ul>
    <li>{{ config.header_font.data.font_family }}<li>
    <li><button (click)="openForm('header')">{{ button_text }}</button>
    <ng-container *ngIf="show_form">
        <li *ngIf="fonts">
        <span *ngFor="let font of fonts">
        {{ font.font_family }}//form will live here eventually as a select dropdown
        </span>
        </li>
    </ng-container>
</ul>

component.ts

public show_form: any = {
    body: false,
    header: false
}

public openForm(key: any) {
    this.show_form[key] = !this.show_form[key]
}

如您所见,单击按钮时show_form 将设置为 true,因此当前两个部分都打开和关闭,而不仅仅是我单击的那个。

我正在遭受一点开发倦怠的折磨,所以对于一个更清晰的头脑来说,问题可能非常明显。谁能指出我正确的方向?

【问题讨论】:

  • 您将需要跟踪要显示的表单,您可以通过k 完成
  • 我有一种感觉,可能需要发生。我目前只是在没有 *ngFor 循环的情况下绑定对象。我需要重新编写它以从对象键绑定而不是按原样绑定。或者你认为这可以在没有循环的情况下完成?
  • 这取决于您要绑定的对象数量以及您想要完成的工作量。归根结底,您只需要一个单一的视图模型属性来保存要显示的表单。如果您的对象中的任何值与该值匹配,则显示您的表单。您无需维护对象或数组即可执行此操作。

标签: angular


【解决方案1】:

show_form 存储为所有标题的对象(或任何其他唯一的对象)

打字稿:

public show_form: any= {
    title:false,
    title2:false
};

public openForm(title:any) {
   this.show_form[title] = !this.show_form[title]
   ...
}

模板:

&lt;li&gt;&lt;button (click)="openForm('title')"&gt;{{ button_text }}&lt;/button&gt;

&lt;li&gt;&lt;button (click)="openForm('title2')"&gt;{{ button_text }}&lt;/button&gt;

<ng-container *ngIf="show_form['title']">
  ...
</ng-container>


<ng-container *ngIf="show_form['title2']">
  ...
</ng-container>

【讨论】:

  • 这看起来可行。我也会试一试。
  • 嗨@Adrita - 试过这个,但show_form在页面加载时总是设置为true,并且在点击按钮时不会关闭。
  • 可以分享到stackbiltz吗
  • 我会编辑我的问题,因为这里有相当多的 API 依赖
  • 就是这个!杰出的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2021-12-28
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多