首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用两个不同的数组创建视图

使用两个不同的数组创建视图
EN

Stack Overflow用户
提问于 2020-07-24 05:01:42
回答 3查看 92关注 0票数 1

我有两个数组。第一个有classId和className

代码语言:javascript
复制
classes = [  {classid : 1 , classname:"class1"},{classid : 2 , classname:"class2"},{classid  : 3 , classname:"class3"}]

第二个数组是:

代码语言:javascript
复制
 subjectWithTopics = [
  {classid:1,subjectName:"hindi", topicName : "topic1 of hindi class id 10" },
  {classid:1,subjectName:"hindi", topicName : "topic2 of hindi class id 10" },
  {classid:1,subjectName:"English", topicName : "topic1 of English class id 10" },
  {classid:1,subjectName:"English", topicName : "topic2 of English class id 10" },
  {classid:1,subjectName:"English", topicName : "topic3 of English class id 10" },
  {classid:2,subjectName:"hINDI", topicName : "topic1 of hINDI class id 20" },
  {classid:2,subjectName:"HINDI", topicName : "topic2 of hINDI class id 20" },
  {classid:2,subjectName:"HINDI", topicName : "topic3 of HINDI class id 20" },
  {classid:2,subjectName:"English", topicName : "topic1 of English class id 20" },
  {classid:2,subjectName:"English", topicName : "topic2 of English class id 20" },
  {classid:2,subjectName:"English", topicName : "topic3 of English class id 20" },
]

我想要的是,在屏幕的左边,我将使用ngFor根据类数组显示按钮。在单击任何这些按钮时,屏幕的右边部分将显示该类的主题,该主题与该类中每个主题的主题一起单击。

我的想法是,我将捕获类的分类按钮,然后将排序的subjectWithTopics数组根据该id,但不知道下一步是什么。

如果有人可以的话请帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-24 05:36:10

为此,您可以调用一个方法来筛选(或排序) subjectWithTopics数组,以便显示它。

假设您从右侧隐藏的表开始,单击按钮后将显示所选的classId。

因此,我们从打印所有按钮的ngFor开始:

代码语言:javascript
复制
<button *ngFor="let c of classes" (click)="selectClass(c)"> 
    {{ c.classname }} 
</button>

右手表(至少在本例中)应该显示给定classId的所有选定元素,或者在没有元素的情况下隐藏。我会这样做:

代码语言:javascript
复制
<table *ngIf="selectedSubjects && selectedSubjects.length > 0" >
    <tr>       
       <th> Subject name </th>
       <th> Subject name </th>
    </tr>
    <tr *ngFor="let subject of selectedSubjects">
       <th> {{ subject.subjectName }} </th>
       <th> {{ subject.topicName }} </th>
    </tr>
</table>

在控制器(.ts文件)中,编写"selectClass“函数,它将过滤subjectWithTopics数组,并将其放入新创建的数组"selectedSubjects”(您应该在控制器类中定义该数组):

代码语言:javascript
复制
selectClass(selectedClass){
   this.selectedSubjects = subjectWithTopics.filter( topic => topic.classId === selectedClass.classid);
}

那应该就行了!

票数 1
EN

Stack Overflow用户

发布于 2020-07-24 05:33:29

您可以将主题存储在变量中,并在html中呈现该变量。

只要单击了一个类,就可以编写一个函数来获取主题。为例

代码语言:javascript
复制
let subjects = [];
...
getSubjects(classId){
  this.subjects = this.subjectWithTopics.filter(subject=>subject.classId===classId)
}

然后在html中的for循环中呈现此函数。为例

代码语言:javascript
复制
<div ngFor="let subject of subjects">
</div>
票数 1
EN

Stack Overflow用户

发布于 2020-07-24 06:15:08

component.html

代码语言:javascript
复制
<!-- display unique subject array and on setTopics() will filter topics by subject name-->
<h3>Classes</h3>
<div *ngFor="let classname of classes" style="display:inline-block;">
  <button style="margin: 0px 5px; color: blue;" (click)="setTopics(classname)">{{classname | uppercase}}  </button>
</div>
<h3>Topics</h3>
<div *ngFor="let topic of topics">
  <div (click)="setTopics(topic)">{{topic.topicName}}  </div>
</div>

compoent.ts

代码语言:javascript
复制
import { Component, VERSION, OnInit } from '@angular/core';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  implements OnInit{
  name = 'Angular ' + VERSION.major;
  classesArray  = [
  {classid:1,subjectName:"hindi", topicName : "topic1 of hindi class id 10" },
  {classid:1,subjectName:"hindi", topicName : "topic2 of hindi class id 10" },
  {classid:1,subjectName:"English", topicName : "topic1 of English class id 10" },
  {classid:1,subjectName:"English", topicName : "topic2 of English class id 10" },
  {classid:1,subjectName:"English", topicName : "topic3 of English class id 10" },
  {classid:2,subjectName:"hINDI", topicName : "topic1 of hINDI class id 20" },
  {classid:2,subjectName:"HINDI", topicName : "topic2 of hINDI class id 20" },
  {classid:2,subjectName:"HINDI", topicName : "topic3 of HINDI class id 20" },
  {classid:2,subjectName:"English", topicName : "topic1 of English class id 20" },
  {classid:2,subjectName:"English", topicName : "topic2 of English class id 20" },
  {classid:2,subjectName:"English", topicName : "topic3 of English class id 20" },
];
classes = [];
topics = [];
ngOnInit() {
  // find unique class names
  this.classes = this.classesArray.map((obj) => obj.subjectName.toLowerCase());
    this.classes = this.classes.filter((v, i) => this.classes.indexOf(v) === i);
  // default selected subject to hindi
  this.setTopics('hindi');
}
// filter topics by subjectname and generate new topics array
setTopics(subjectName) {
  this.topics = this.classesArray.filter((classes)=> classes.subjectName.toLowerCase() === subjectName.toLowerCase())
}

}

下面是工作演示https://stackblitz.com/edit/santosh-angular-array-filter

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63067142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档