2017-02-15 63 views
1

分组Obersavable数据I具有可观察到的数据流是类似于此: -与角2

[ 
    { 
    "WorkId": 1539, 
    "Name": Exam 1, 
    "AssessmentTypeId" : 2345, 
    "AssessmentTypeDescription" : "Exam" 
    ... 
    }, 
    { 
    "WorkId": 1540, 
    "Name": Exam 2, 
    "AssessmentTypeId" : 2345, 
    "AssessmentTypeDescription" : "Exam" 
    ... 
    }, 
    { 
    "WorkId": 1541, 
    "Name": Coursework, 
    "AssessmentTypeId" : 2346, 
    "AssessmentTypeDescription" : "Coursework" 
    ... 
    } 
    ] 

每个对象都是一个被称为一个元素。我想要做的是将元素数据显示在由AssessmentTypeId分组的html表格中。例如。

考试

WorkId名称

1539考试1

1540考试2

习作

WorkId名称

1541课程作业1

我对于使用observables工作还很陌生,我对如何解决这个问题不确定吗?我猜我需要看看使用.groupBy转换?

谢谢。

+2

groupBy()运算符?不必要。流中究竟发生了什么:所有对象或个体对象的单一阵列? – AngularChef

+0

从流中获取所有对象的单个数组。 –

回答

0

你可以把它们与阵列的对象,然后用它来创建表:

var idTracker = {}; 

//Stream is array of objects from your observable 
stream.map(obj => idTracker[obj.AssesmentTypeId] ? idTracker[obj.AssesmentTypeId].push(obj) : idTracker[obj.AssesmentTypeId] = [obj]); 

现在idTracker将钥匙是你AssesmentTypeId链接到的所有对象的数组流在有这个ID。然后您可以使用它动态创建表。

请注意,您将在组件范围声明idTracker,然后在可观察回调的主体内调用流映射(其中流是来自subscribe的结果数据)。