当前位置: 首页 > 知识库问答 >
问题:

如何根据angular 7中的复选框选择向表中添加新列

公西运良
2023-03-14

我有一个包含一些行的表。表数据来自循环。在这里,我需要根据复选框的选择添加新列。假设我选中了产品,一个新的表标题将创建为产品,以及表标题下方的空白行,再次,如果我取消选中,创建的列将被删除。新列应该在添加按钮之前创建。下面是代码https://stackblitz.com/edit/angular-table-focus

    <div class="container">
  <h2>Basic Table</h2>
  <p>The .table class adds basic styling (light padding and only horizontal dividers) to a table:</p> 
<div><button (click)="enable()">Edit</button> <input type="checkbox" value="product">Product&nbsp;<input type="checkbox" value="market">market</div>  
  <table class="table border">
    <thead>
    <tr>
    <th>Items</th>
    <th>Business</th>
    <th></th>
    </tr>
    </thead>
    <tbody>
      <tr *ngFor="let row of groups;let i = index" (click)="setClickedRow(i)"  [class.active]="i == selectedRow">
       <td> <input #focus [disabled]='toggleButton' type="text" value="{{row.name}}"> </td>
       <td> <input [disabled]='toggleButton' type="text" value="{{row.items}}"> </td>
       <td> <button (click)="addRow(i)">Add</button></td>
      </tr>
    </tbody>
  </table>
</div>
import { Component,ViewChild, ElementRef } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent  {
selectedRow : Number;

@ViewChild('focus') input: ElementRef;
      public toggleButton: boolean = true;
  ngOnInit() {

  }
  groups=[
     {
       "name": "pencils",
       "items": "red pencil"
     },
     {
       "name": "rubbers",
       "items": "big rubber"
     },
     {
       "name": "rubbers1",
       "items": "big rubber1"
     },
  ];
  addRow(index): void {
    var currentElement = this.groups[index];
    this.groups.splice(index, 0, currentElement);
 }
 enable(){
    this.toggleButton = false
    setTimeout(()=>{ // this will make the execution after the above boolean has changed
    this.input.nativeElement.focus();
    this.selectedRow = 0;
  },0); 
    }
  setClickedRow(index) {
    this.selectedRow = index;
  }
}

共有1个答案

曹臻
2023-03-14

查看我的StackBlitz现场演示:https://stackblitz.com/edit/angular-table-focus-77xrnn

要动态添加或删除,我们必须首先从组件中获取值,而不是在模板中对其进行硬编码。

columns = ["Items", "Business"];

组成部分:

每当切换列复选框时,我们都会监听Change事件,并相应地添加或删除该列。

onColumnStatusChange(column, isChecked) {
  if (isChecked) {
    // Add column to the table.

    this.columns.push(column);

    this.groups.forEach(value => {
      value[column] = "";
    });
  } else {
    // Delete column from the table.

    this.columns.splice(this.columns.indexOf(column), 1);

    this.groups.forEach(value => {
      delete value[column];
    });
  }
}

模板:

在模板中,必须动态读取列和表行项。

<input type="checkbox" value="product" (change)="onColumnStatusChange($event.target.value, $event.target.checked)">Product&nbsp;
<input type="checkbox" value="market" (change)="onColumnStatusChange($event.target.value, $event.target.checked)">market
  ...
  ...
<tr>
  <ng-container *ngFor="let column of columns; let i = index">
     <th>{{ column }}</th>
  </ng-container>
</tr>
  ...
  ...
<tr *ngFor="let row of groups;let i = index" (click)="setClickedRow(i)"  [class.active]="i == selectedRow">
   <ng-container *ngFor="let item of objectKeys(row); let j = index">
      <td><input #focus [disabled]='toggleButton' type="text" value="{{row[item]}}"></td>
   </ng-container> 
   <td><button (click)="addRow(i)">Add</button></td>
</tr>
 类似资料:
  • 我正在使用它来自动化一个GWT应用程序。有一个包含以下列的表:checkbox,userID,Username,Fname,LName,email。 我得到的错误是:selenium.common.exceptions.invalidselectoreXception:消息:无效选择器:无法找到具有xpath表达式//tr[td[contains(text()='agency_group_0_ag

  • 我需要做的是-添加/删除数组中每个复选框的名称(由用户选中/未选中),并发送到服务器。我被困在以下代码中。任何帮助都很感激。谢啦 复选框项目。js

  • 如果数据库中的数据为是或否,如何选中复选框,我尝试使用attr函数,但没有成功 这是我的html

  • 我的p:dataTable是这样设置的。 感谢任何帮助

  • tbody和thead中的复选框使表呈现得很好。我可以在DataTable init外部编写简单的onChange函数,但它只检测表的可见页上选中或未选中的复选框。 如何或在哪里可以编写一个函数,当一个复选框被更改时会触发,然后返回表中被选中的复选框总数?

  • 问题内容: 我有一个性别选择列表。 码: 我想使用下拉列表中的图像作为drop-down-icon.jpeg。 我想添加一个按钮代替下拉图标。 怎么做? 问题答案: 在 Firefox中, 您可以将背景图片添加到选项中: 更好的是,您可以像这样将HTML和CSS分开 HTML CSS 在 其他浏览器中 ,唯一的方法是使用某些JS小部件库,例如 jQuery UI ,例如使用Selectable 。