【发布时间】:2019-02-23 15:13:49
【问题描述】:
我正在使用 div 开发一个 n 级嵌套表的脚本。
所以有 5 到 6 列 n 行数,每一列都必须展开/折叠按钮,单击该按钮我会调用 API,它会为我提供与所选行过滤器相关的数据。
以前当我使用核心 JavaScript 和 jQuery 时,我使用文档选择器的 find 方法来识别展开/折叠按钮的父级,并仅使用 innerHTML 或 append 在特定 div 之后推送动态创建的 HTML jQuery的方法
我对 Angular 有点陌生,而且工作不多。请帮我解决这个问题。
splitOpt 是一个对象数组,我将根据这些对象拆分报表数据。
this.splitOpt = [
{
id: "country",
label: "Country"
},
{
id:"os".
label:"Operating System"
},
{
id:"osv".
label:"Operating System Version"
}
]
获取报告的功能
getReport() {
// apiFilters are array of object having some values to filter report data
var apiFilters: any = [{}];
for (var i = 0; i < this.sFilters.length; i++) {
if (this.sFilters[i][0].values.length > 0) {
var k;
k = this.sFilters[i][0].id
apiFilters[0][k] = this.sFilters[i][0].values;
}
}
var split = this.splitOpt[0].id;
this._apis.getReportData(split, apiFilters[0]).subscribe(response => {
if (response.status == 1200) {
this.reportData = response.data.split_by_data;
}
})
}
检查是否有更多拆分的功能
checkIfHaveMoreSplits(c){
if(this.splitOpt.length > 0) {
var index = this.splitOpt.findIndex(function(v) {
return v.id == c
})
if (typeof(this.splitOpt[index+1]) != "undefined"){
return this.splitOpt[index+1];
} else {
return 0;
}
}
}
根据拆分和报告数据绘制表格的代码。
假设在splitopt 对象中只有一个针对该国家/地区的对象,而不是checkIfHaveMoreSplits() 返回0,这意味着我不必提供展开按钮,如果不是0,则展开按钮将出现在那里.
点击展开按钮后,我将从splitopt 中选择下一个元素并调用API 以获取将拆分参数作为载体的报告等。
<div class="table" >
<div class="row" *ngFor="let rData of reportData; let i = index;" >
<div class="col" >
<button
class="btn btn-sm"
*ngIf="checkIfHaveMoreSplits(splitbykey) !== 0"
(click)="splitData(splitbykey)"
>+</button>
{{rData[splitbykey]}}
</div>
<div class="col">{{rData.wins}}</div>
<div class="col">{{rData.conversions}}</div>
<div class="col">{{rData.cost}}</div>
<div class="col">{{rData.bids}}</div>
<div class="col">{{rData.impressions}}</div>
<div class="col">{{rData.rev_payout}}</div>
</div>
我正在管理一个数组,该数组确定我可以展开折叠元素的深度
让我们假设数组包含三个元素,即国家、运营商和操作系统
因此,我将绘制的第一个表格包含表格中的所有国家/地区,点击展开按钮,我将发送所选国家/地区并获取该特定国家/地区的运营商。获得响应后,我想根据响应创建自定义 HTML,并在所选行后附加 html。
这里是截图以及完整的工作流程:)
第 2 步
第 3 步
【问题讨论】:
-
什么是
splitbykey -
按键拆分是单维值,根据我们的报表数据进行拆分。例如。首先,用户已选择国家作为拆分参数,因此我将调用拆分为国家/地区,api 将为所有国家/地区数据提供响应,我将相应地绘制表格,现在假设我想获取该国家/地区的运营商数据。下一步将选择国家作为拆分数据。现在下一个请求就像拆分参数是运营商和特定国家/地区,我将为其传递过滤器。
标签: javascript html angular angular5