【问题标题】:Nesting *ngfor. I need to populate subtasks under the parent task in Angular.io嵌套 *ngfor。我需要在 Angular.io 的父任务下填充子任务
【发布时间】:2019-08-12 11:59:00
【问题描述】:

stackblitz:https://stackblitz.com/edit/angular-xk9nw6?file=src%2Fapp%2Ftable%2Ftable.component.html

我有一个 json 文件,其中的任务具有子任务的属性,这些子任务的属性类型与其父任务相同。单击父任务时,需要将子子任务附加到其父任务的底部。我正在尝试在不使用这些刚性库的情况下制作自定义树形网格

您可以在我的 stackblitz 中看到子任务被填充在所有父任务下,而不仅仅是它们所属的父任务。如果我将它移动到父 *ngfor 中,我的子任务将被附加到每个父任务的底部,而不仅仅是它所属的父任务。

找出为什么 subtasks.taskName 不会显示,而 subtasks.taskID 会显示的奖励积分。(由 Julien Bertacco 解决的奖励)。谢谢,老兄。

到目前为止我的代码:

样本数据:

/**
 * Test cases data source
 */
export let sampleData: Object[] = [
    {
        taskID: 1,
        taskName: 'Planning',
        startDate: new Date('02/03/2017'),
        endDate: new Date('02/07/2017'),
        progress: 100,
        duration: 5,
        priority: 'Normal',
        approved: false,
        isInExpandState: true,
        subtasks: [
            { taskID: 2, taskName: 'Plan timeline', startDate: new Date('02/03/2017'), endDate: new Date('02/07/2017'), duration: 5, progress: 100, priority: 'Normal', approved: false },
            { taskID: 3, taskName: 'Plan budget', startDate: new Date('02/03/2017'), endDate: new Date('02/07/2017'), duration: 5, progress: 100, approved: true },
            { taskID: 4, taskName: 'Allocate resources', startDate: new Date('02/03/2017'), endDate: new Date('02/07/2017'), duration: 5, progress: 100, priority: 'Critical', approved: false },
            { taskID: 5, taskName: 'Planning complete', startDate: new Date('02/07/2017'), endDate: new Date('02/07/2017'), duration: 0, progress: 0, priority: 'Low', approved: true }
        ]
    },
    {
        taskID: 6,
        taskName: 'Design',
        startDate: new Date('02/10/2017'),
        endDate: new Date('02/14/2017'),
        duration: 3,
        progress: 86,
        priority: 'High',
        isInExpandState: false,
        approved: false,
        subtasks: [
            { taskID: 7, taskName: 'Software Specification', startDate: new Date('02/10/2017'), endDate: new Date('02/12/2017'), duration: 3, progress: 60, priority: 'Normal', approved: false },
            { taskID: 8, taskName: 'Develop prototype', startDate: new Date('02/10/2017'), endDate: new Date('02/12/2017'), duration: 3, progress: 100, priority: 'Critical', approved: false },
            { taskID: 9, taskName: 'Get approval from customer', startDate: new Date('02/13/2017'), endDate: new Date('02/14/2017'), duration: 2, progress: 100, approved: true },
            { taskID: 10, taskName: 'Design Documentation', startDate: new Date('02/13/2017'), endDate: new Date('02/14/2017'), duration: 2, progress: 100, approved: true },
            { taskID: 11, taskName: 'Design complete', startDate: new Date('02/14/2017'), endDate: new Date('02/14/2017'), duration: 0, progress: 0, priority: 'Normal', approved: true }
        ]
    },
    {
        taskID: 12,
        taskName: 'Implementation Phase',
        startDate: new Date('02/17/2017'),
        endDate: new Date('02/27/2017'),
        priority: 'Normal',
        approved: false,
        duration: 11,
        subtasks: [
            {
                taskID: 13,
                taskName: 'Phase 1',
                startDate: new Date('02/17/2017'),
                endDate: new Date('02/27/2017'),
                priority: 'High',
                approved: false,
                duration: 11,
                subtasks: [{
                    taskID: 14,
                    taskName: 'Implementation Module 1',
                    startDate: new Date('02/17/2017'),
                    endDate: new Date('02/27/2017'),
                    priority: 'Normal',
                    duration: 11,
                    approved: false,
                    subtasks: [
                        { taskID: 15, taskName: 'Development Task 1', startDate: new Date('02/17/2017'), endDate: new Date('02/19/2017'), duration: 3, progress: '50', priority: 'High', approved: false },
                        { taskID: 16, taskName: 'Development Task 2', startDate: new Date('02/17/2017'), endDate: new Date('02/19/2017'), duration: 3, progress: '50', priority: 'Low', approved: true },
                        { taskID: 17, taskName: 'Testing', startDate: new Date('02/20/2017'), endDate: new Date('02/21/2017'), duration: 2, progress: '0', priority: 'Normal', approved: true },
                        { taskID: 18, taskName: 'Bug fix', startDate: new Date('02/24/2017'), endDate: new Date('02/25/2017'), duration: 2, progress: '0', priority: 'Critical', approved: false },
                        { taskID: 19, taskName: 'Customer review meeting', startDate: new Date('02/26/2017'), endDate: new Date('02/27/2017'), duration: 2, progress: '0', priority: 'High', approved: false },
                        { taskID: 20, taskName: 'Phase 1 complete', startDate: new Date('02/27/2017'), endDate: new Date('02/27/2017'), duration: 0, priority: 'Low', approved: true }

                    ]
                }]
            },
            {
                taskID: 21,
                taskName: 'Phase 2',
                startDate: new Date('02/17/2017'),
                endDate: new Date('02/28/2017'),
                priority: 'High',
                approved: false,
                duration: 12,
                subtasks: [{
                    taskID: 22,
                    taskName: 'Implementation Module 2',
                    startDate: new Date('02/17/2017'),
                    endDate: new Date('02/28/2017'),
                    priority: 'Critical',
                    approved: false,
                    duration: 12,
                    subtasks: [
                        { taskID: 23, taskName: 'Development Task 1', startDate: new Date('02/17/2017'), endDate: new Date('02/20/2017'), duration: 4, progress: '50', priority: 'Normal', approved: true },
                        { taskID: 24, taskName: 'Development Task 2', startDate: new Date('02/17/2017'), endDate: new Date('02/20/2017'), duration: 4, progress: '50', priority: 'Critical', approved: true },
                        { taskID: 25, taskName: 'Testing', startDate: new Date('02/21/2017'), endDate: new Date('02/24/2017'), duration: 2, progress: '0', priority: 'High', approved: false },
                        { taskID: 26, taskName: 'Bug fix', startDate: new Date('02/25/2017'), endDate: new Date('02/26/2017'), duration: 2, progress: '0', priority: 'Low', approved: false },
                        { taskID: 27, taskName: 'Customer review meeting', startDate: new Date('02/27/2017'), endDate: new Date('02/28/2017'), duration: 2, progress: '0', priority: 'Critical', approved: true },
                        { taskID: 28, taskName: 'Phase 2 complete', startDate: new Date('02/28/2017'), endDate: new Date('02/28/2017'), duration: 0, priority: 'Normal', approved: false }

                    ]
                }]
            },

            {
                taskID: 29,
                taskName: 'Phase 3',
                startDate: new Date('02/17/2017'),
                endDate: new Date('02/27/2017'),
                priority: 'Normal',
                approved: false,
                duration: 11,
                subtasks: [{
                    taskID: 30,
                    taskName: 'Implementation Module 3',
                    startDate: new Date('02/17/2017'),
                    endDate: new Date('02/27/2017'),
                    priority: 'High',
                    approved: false,
                    duration: 11,
                    subtasks: [
                        { taskID: 31, taskName: 'Development Task 1', startDate: new Date('02/17/2017'), endDate: new Date('02/19/2017'), duration: 3, progress: '50', priority: 'Low', approved: true },
                        { taskID: 32, taskName: 'Development Task 2', startDate: new Date('02/17/2017'), endDate: new Date('02/19/2017'), duration: 3, progress: '50', priority: 'Normal', approved: false },
                        { taskID: 33, taskName: 'Testing', startDate: new Date('02/20/2017'), endDate: new Date('02/21/2017'), duration: 2, progress: '0', priority: 'Critical', approved: true },
                        { taskID: 34, taskName: 'Bug fix', startDate: new Date('02/24/2017'), endDate: new Date('02/25/2017'), duration: 2, progress: '0', priority: 'High', approved: false },
                        { taskID: 35, taskName: 'Customer review meeting', startDate: new Date('02/26/2017'), endDate: new Date('02/27/2017'), duration: 2, progress: '0', priority: 'Normal', approved: true },
                        { taskID: 36, taskName: 'Phase 3 complete', startDate: new Date('02/27/2017'), endDate: new Date('02/27/2017'), duration: 0, priority: 'Critical', approved: false },
                    ]
                }]
            }
        ]
    }
];

我的标记:

    <!-- <H1>Table</H1>

<table  class="table">
  <thead>
  <tr>
    <th>expand</th>
    <th>task id</th>
    <th>task name</th>
    <th>button</th>
  </tr>
</thead>  
<tbody *ngFor="let datum of data">
  <tr>
    <td class="" (click)="subtask(datum); $event.stopPropagation()" >> </td>
    <td class="">{{datum.taskID}}</td>
    <td class="">{{datum.taskName}}</td>
    <td class="btn btn.primary" (click)="dropdown(datum)">...</td>
  </tr>
</tbody> 
<tbody>
      <tr [hidden]="!foo" *ngFor="let subtask of subtaskArray" >
          <td class="">> </td>
          <td class="">{{subtask?.taskID}}</td>
          <td class="">{{subtask?.taskName}}</td>
          <td class=" btn btn.primary" (click)="dropdown(subtask)">...</td>
        </tr>
</tbody>
</table> -->
<H1>Table</H1>

<table  class="table">
  <thead>
  <tr>
    <th>expand</th>
    <th>task id</th>
    <th>task name</th>
    <th>button</th>
  </tr>
</thead>  
<tbody>
  <tr *ngFor="let datum of data">
    <td class="" (click)="subtask(datum); $event.stopPropagation()" >> </td>
    <td class="">{{datum.taskID}}</td>
    <td class="">{{datum.taskName}}</td>
    <td class="btn btn.primary" (click)="dropdown(datum)">...</td>
  </tr>
  <tr [hidden]="!foo" *ngFor="let subtask of subtaskArray" >
      <td class="">> </td>
      <td class="">{{subtask?.taskID}}</td>
      <td class="">{{subtask?.taskName}}</td>
      <td class=" btn btn.primary" (click)="dropdown(subtask)">...</td>
    </tr>
</tbody>
</table>

我的逻辑:

import { Component, OnInit,ViewChild } from '@angular/core';
import { sampleData } from '../datasource';

@Component({
  selector: 'app-table',
  templateUrl: './table.component.html',
  styleUrls: ['./table.component.css']
})
export class TableComponent implements OnInit {

  constructor() { }

  @ViewChild('treegrid')
  public data: Object[];
  public foo: boolean;
  public subtaskArray: any;
  public index: number;

  dropdown(e){
    console.log(e);
  }

  subtask(e){
    console.log(e);

    this.subtaskArray = e.subtasks
    this.index = e.taskID;
    this.foo == false ? this.foo = true : this.foo = false;


  }

  ngOnInit(): void {
    this.data = sampleData;
}
}

【问题讨论】:

    标签: angular nested angular2-template ngfor treegrid


    【解决方案1】:

    要填充父任务下的子任务,您需要这样循环

    <tbody *ngFor="let datum of data; index as i">
      <tr>
          <td class="" (click)="subtask(datum, i); $event.stopPropagation()" >> </td>
          <td class="">{{datum.taskID}}</td>
          <td class="">{{datum.taskName}}</td>
          <td class="btn btn.primary" (click)="dropdown(datum)">...</td>
      </tr>
      <tr [hidden]="index != i" *ngFor="let subtask of datum.subtasks" >
          <td class="">> </td>
          <td class="">{{subtask?.taskID}}</td>
          <td class="">{{subtask?.taskName}}</td>
          <td class=" btn btn.primary" (click)="dropdown(subtask)">...</td>
      </tr>
    </tbody> 
    

    并通过

    更改您的table.component.ts 文件subtask 函数
    subtask(e,i){    
       this.subtaskArray = e.subtasks
       this.index = i;
       this.foo == false ? this.foo = true : this.foo = false;    
    }
    

    【讨论】:

    • 这就是票。谢谢。啊。它一直在我脸上。我觉得双重愚蠢。谢谢!
    【解决方案2】:
    <ul *ngFor="let datum of data">
    <li>
    <span (click)="subtask(datum); $event.stopPropagation()">></span>
    {{datum.taskID}} {{datum.taskName}}
    
     <ul [hidden]="!foo">
     <li *ngFor="let subtask of subtaskArray">
      {{subtask?.taskID}} {{subtask?.taskName}}
     </li>
    
    </ul>
    </li>
    </ul>
    

    奖励:您编写了子s任务而不是子任务

    【讨论】:

    • 啊啊啊啊啊。您将赢得奖金回合。我怎么错过了?!?我希望我有足够的影响力给你一个赞成票。我需要声誉 15。谢谢,先生
    • @camelCase 如果这能解决您的问题,请务必将此标记为答案。谢谢!
    • @AndyDangerGagne 它只解决了部分问题。恰好是一个错字的奖金部分
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多