在material表格中增加一个可展开面板

需求:点击表格某一行,在其下面出现可展开面板以显示额外的东西;

解决:看了material官网,没有现成的轮子可以用,但是还是被我找到一个简易的添加在表格中的可展开面板。

table.html:

<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">
  <!--- Note that these columns can be defined in any order.
        The actual rendered columns are set as a property on the row definition" -->

  <!-- Position Column -->
  <ng-container matColumnDef="position">
    <th mat-header-cell *matHeaderCellDef>No.</th>
    <td mat-cell *matCellDef="let element">
      <mat-expansion-panel
        hideToggle
        [expanded]="expandedRows[element.position]"
        (click)="expand(element)"
      >
        <mat-expansion-panel-header>
          {{element.position}}
        </mat-expansion-panel-header>
        123
        <div *ngFor="let child of element.children">{{ child.id }}</div>
      </mat-expansion-panel>
    </td>
  </ng-container>

  <!-- Name Column -->
  <ng-container matColumnDef="name">
    <th mat-header-cell *matHeaderCellDef>Name</th>
    <td mat-cell *matCellDef="let element">
      <mat-expansion-panel
        hideToggle
        [expanded]="expandedRows[element.position]"
        (click)="expand(element)"
      >
        <mat-expansion-panel-header>
          {{element.name}}
        </mat-expansion-panel-header>
        <div *ngFor="let child of element.children">{{ child.text }}</div>
      </mat-expansion-panel>
    </td>
  </ng-container>

  <!-- Weight Column -->
  <ng-container matColumnDef="weight">
    <th mat-header-cell *matHeaderCellDef>Weight</th>
    <td mat-cell *matCellDef="let element">{{element.weight}}</td>
  </ng-container>

  <!-- Symbol Column -->
  <ng-container matColumnDef="symbol">
    <th mat-header-cell *matHeaderCellDef>Symbol</th>
    <td mat-cell *matCellDef="let element">{{element.symbol}}</td>
  </ng-container>

  <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
  <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>

<pre>{{expandedRows | json}}</pre>

<!-- Copyright 2019 Google LLC. All Rights Reserved.
    Use of this source code is governed by an MIT-style license that
    can be found in the LICENSE file at http://angular.io/license -->

table.ts

import { Component } from "@angular/core";

export interface PeriodicElement {
  name: string;
  position: number;
  weight: number;
  symbol: string;
  children?: any[];
}

const ELEMENT_DATA: PeriodicElement[] = [
  { position: 1, name: "Hydrogen", weight: 1.0079, symbol: "H" },
  { position: 2, name: "Helium", weight: 4.0026, symbol: "He" },
  { position: 3, name: "Lithium", weight: 6.941, symbol: "Li" },
  {
    position: 4,
    name: "Beryllium",
    weight: 9.0122,
    symbol: "Be",
    children: [
      { id: "4.1", text: "abc 4.1" },
      { id: "4.2", text: "abc 4.2" },
      { id: "4.3", text: "abc 4.3" },
    ]
  },
  { position: 5, name: "Boron", weight: 10.811, symbol: "B" },
  { position: 6, name: "Carbon", weight: 12.0107, symbol: "C" },
  { position: 7, name: "Nitrogen", weight: 14.0067, symbol: "N" },
  { position: 8, name: "Oxygen", weight: 15.9994, symbol: "O" },
  { position: 9, name: "Fluorine", weight: 18.9984, symbol: "F" },
  { position: 10, name: "Neon", weight: 20.1797, symbol: "Ne" }
];

/**
 * @title Basic use of `<table mat-table>`
 */
@Component({
  selector: "table-basic-example",
  styleUrls: ["table-basic-example.css"],
  templateUrl: "table-basic-example.html"
})
export class TableBasicExample {
  displayedColumns: string[] = ["position", "name", "weight", "symbol"];
  dataSource = ELEMENT_DATA;

  expandedRows: { [key: number]: boolean } = {};

  expand(element: PeriodicElement) {
    this.expandedRows[element.position] = !this.expandedRows[element.position]
  }
}

/**  Copyright 2019 Google LLC. All Rights Reserved.
    Use of this source code is governed by an MIT-style license that
    can be found in the LICENSE file at http://angular.io/license */

table.scss:

table {
  width: 100%;
}

.mat-expansion-panel {
  border-radius: 0;
  box-shadow: none;
}
.mat-expansion-panel-body {
    padding: 0;
}

.mat-expansion-panel-header {
  padding: 0; 
}

可以添加我的v(jinji3261),一起学习前端知识

好的,我可以为您提供一些关于如何在Three.js Editor的Sidebar.Material.js文件添加一个弹出框,其包含一个表格和分页的指导。 首先,您需要确保已经正确安装了Three.js,并且它能够在您的项目正常工作。 然后,您需要在Sidebar.Material.js文件编写一个组件,该组件将用于显示弹出框。您可以使用HTML和CSS来创建弹出框的布局和样式,并使用JavaScript来处理其交互和行为。 接下来,您需要在弹出框添加一个表格,并且为该表格设置分页功能。您可以使用JavaScript和jQuery等技术来创建和操作表格,并使用分页插件来实现分页功能。以下是一个基本的示例代码: ```javascript // 创建表格 var table = $("<table></table>").addClass("table"); // 创建表头 var thead = $("<thead></thead>"); var tr = $("<tr></tr>"); tr.append($("<th></th>").text("列1")); tr.append($("<th></th>").text("列2")); thead.append(tr); table.append(thead); // 创建表体 var tbody = $("<tbody></tbody>"); for (var i = 0; i < 10; i++) { var tr = $("<tr></tr>"); tr.append($("<td></td>").text("行" + i + "列1")); tr.append($("<td></td>").text("行" + i + "列2")); tbody.append(tr); } table.append(tbody); // 创建分页器 var pager = $("<div></div>").addClass("pager"); for (var i = 1; i <= 5; i++) { pager.append($("<a></a>").text(i)); } // 将表格和分页器添加到弹出框 var dialog = $("<div></div>").addClass("dialog"); dialog.append(table); dialog.append(pager); // 将弹出框添加到页面 $("body").append(dialog); ``` 最后,在Sidebar.Material.js文件将这些组件组合在一起,并确保它们能够正确地工作和显示。您可以使用JavaScript和Vue.js等技术来实现此目的。 希望这些指导能够帮助您实现您的需求。如果您有任何问题或需要进一步的帮助,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值