当前位置: 首页 > 面试题库 >

多层表(如果单击,则在另一个表中)

韩嘉胜
2023-03-14
问题内容

情境

可以说我是一家拥有许多商店的大公司的所有者。根据我在公司中所扮演的角色(在组织中的职位),我将对数据具有不同的访问权限。将有不同的模块,对于这个特定的问题,有一个模块可以使拥有访问权限的用户每天进行成本和销售。(无论是否合法……无关紧要,仅举一个例子。)

用户因此可以通过REST
API从BackEnd(Java应用程序)获取所有数据,以及该用户有权访问的所有商店的所有数据。然后,用户应该能够通过不同的过滤器组合来过滤数据。与我的问题最相关的是日期间隔(天)。

将有一些图表显示不同级别的数据,下面是我想要多层表的表区域,因此是我的问题。

到目前为止完成

  1. 我首先创建了具有手风琴组级别存储的手风琴,然后在表中的手风琴主体中存储了下一级数据。(目前仅使用硬编码的数据。)这里的问题是,相应的标题是一个字符串,经过一番讨论,我们认为这不是一个好的解决方案,因为标题将由表中的数据部分组成单独的列。因此,当折叠时(在折叠一个或多个折叠式手风琴时,当然,要弄乱”标题数据以使其水平匹配(在折叠式手风琴标题之间)不同的“存储”是困难的)。
  2. 我将手风琴替换为table和ng-repeat。已成功使用图形化API的数据和JSON数据填充了第一级表,并让i18next用作标题。

JSON格式

{ 
"metadata":{
    "storesInTotal":"25",
    "storesInRepresentation":"2"
},
"storedata":[
    { 
        "store" : {
            "storeId" : "1000",
            "storeName" : "Store 1",
            "storePhone" : "+46 31 1234567",
            "storeAddress": "Some street 1",
            "storeCity" : "Gothenburg"
        },
        "data" : {
            "startDate" : "2013-07-01",
            "endDate" : "2013-07-02",
            "costTotal" : "100000",
            "salesTotal" : "150000",
            "revenueTotal" : "50000",
            "averageEmployees" : "3.5",
            "averageEmployeesHours" : "26.5",
            "dayData" : [
                { 
                    "date" : "2013-07-01",
                    "cost" : "25000",
                    "sales" : "15000",
                    "revenue" : "4000",
                    "employees" : "3",
                    "employeesHoursSum" : "24"
                },
                {
                    "date" : "2013-07-02",
                    "cost" : "25000",
                    "sales" : "16000",
                    "revenue" : "5000",
                    "employees" : "4",
                    "employeesHoursSum" : "29"
                }
            ]
        }
    },
    {
        "store" : {
            "storeId" : "2000",
            "storeName" : "Store 2",
            "storePhone" : "+46 8 9876543",
            "storeAddress": "Big street 100",
            "storeCity" : "Stockholm"
        },
        "data" : {
            "startDate" : "2013-07-01",
            "endDate" : "2013-07-02",
            "costTotal" : "170000",
            "salesTotal" : "250000",
            "revenueTotal" : "80000",
            "averageEmployees" : "4.5",
            "averageEmployeesHours" : "35",
            "dayData" : [
                { 
                    "date" : "2013-07-01",
                    "cost" : "85000",
                    "sales" : "120000",
                    "revenue" : "35000",
                    "employees" : "5",
                    "employeesHoursSum" : "38"
                },
                {
                    "date" : "2013-07-02",
                    "cost" : "85000",
                    "sales" : "130000",
                    "revenue" : "45000",
                    "employees" : "4",
                    "employeesHoursSum" : "32"
                }
            ]
        }
    }
],
"_links":{
    "self":{
        "href":"/storedata/between/2013-07-01/2013-07-02"
    }
}
}

可视示例-JSFiddle

检查结果框中左上角的值。尝试单击具有商店ID 2000的示例行,然后依次单击3000和3000,以查看值的变化。
我的JSFiddle的最新更新

所需功能

当单击某行时(如JSFiddle中所示),我想要一个指令或触发的东西去获取所单击的商店的基础数据(dayData),并显示日期间隔中的所有天数。即展开该行,并在被单击的行下包括一个新表,该表也应使用ng-
repeat来显示所有与现有数据相似但内联的数据。

因此,我已经拥有了从索引行中获取$
index以及特定数据的功能。我还需要什么样的指令或任何其他解决方案来获取“行被单击时的数据”并显示在被单击行下方的表中?

我不想一直在DOM中使用它,因为每个商店和许多商店可能有很多dayData。(并且以后会使用分页,但是即使这样,也不会一直在DOM中使用。)这意味着我必须能够在单击一行时以及从先前单击的内容中单击相同或另一个REMOVE时添加。

编辑

新更新的JSFiddle。


问题答案:

要求是不要用所有第二级表填充DOM,我想出了一个解决方案。

首先,我尝试创建一个自定义指令,并使其在正确的位置(在所单击的行下方)插入一行,并创建了一个带有标题的第二级表,但无法使用ng-repeat填充行。

由于找不到完整的解决方案,因此我使用ng-show返回到已经创建的解决方案,并寻求类似的解决方案……并且存在一个解决方案。Angular没有使用ng-
show / ng-hide,而是使用了一个名为ng-switch的指令。

在一级

<tbody data-ng-repeat="storedata in storeDataModel.storedata" 
       data-ng-switch on="dayDataCollapse[$index]">

…然后在第二层,即第二层

<tr data-ng-switch-when="true">

,其中您具有第二级ng-repeat。

这是一个新的 JSFiddle

检查元素,您将看到每个“折叠”的2级表都有一个注释占位符。

更新(2014-09-29)

根据扩展/折叠第3级的要求,这里有一个新的 JSFIDDLE

注意! -此解决方案始终具有DOM中的所有信息,即不像以前的解决方案那样,该解决方案仅添加了关于应在请求时将信息添加到何处的符号。

(不过,由于我的朋友Axel分叉了我的产品,然后添加了功能,因此我对此一无所知。)



 类似资料:
  • 问题内容: 我有两个表,将值存储为。 我正在填充表,如果其他表中不存在值,则只想在其中一个表中插入值。 就像是: 我怎样才能做到这一点? 问题答案: 您需要使用某种类型的查询。 更新(在澄清之后): 例如,如果相应的行在中尚不存在,则下面是如何在其中插入行: 要用同一查询插入多行,恐怕没有什么比这更好的了 原始答案 例如,这将从满足该子句的所有行中提取,并使用用作的值插入行。它将忽略重复的键错误。

  • 问题内容: 尝试通过一些非常有限的知识和经验来进行SQL查询。尝试了很多我通过搜索发现的内容,但没有得出我想要的结果。 我有四个表: 回复:KITS-[KIT_NO]和[ITEM_NO]都位于ITEMS表中。它们的串联是PK。 我想选择ORDERS,ORDERS.DATE,ORDER_DETAILS.ITEM_NO,ITEMS.DESC 没问题。一些简单的内部联接,我在路上。 困难在于在selec

  • 这是我的查询,我尝试了这个查询,它是有效的。 我想显示conference_venue的数据。但是我不想显示id_venue与submission_data表相同的数据(与提到id_submission的id_venue相同)。 我试图查询laravel版本,但它是一个空白的白色屏幕,没有错误。 当我在sql查询控制台中尝试此查询时,此查询可以工作,但在使用Laravel查询生成器尝试时失败。

  • 问题内容: 我有2张桌子,一张用于会员,另一张用于他们的服务。这些是MySQL 5.6服务器上的InnoDB表。 会员表: 服务表: 我尝试达到以下结果: 因此,如果服务表中存在用户ID,则列服务将为true或false。 我尝试使用JOIN和子查询来完成此操作,但没有成功,因此我需要您的帮助;) 问题答案: 使用服务表,请尝试此查询

  • 我使用Symfony 5.3。我有一个表单,有3个字段没有映射到任何实体: "原因"-文本, use_predefined复选框 "predefined_reason"-下拉列表。 我构建的表单如下(一个片段): “原因”字段应根据需要显示在UI中,但其他两个字段不应显示。但是,在验证过程中,如果选中了复选框“预定义的原因”,则第一个字段不应为必填字段,而“预定义的原因”应为必填字段。

  • 问题内容: 具有以下内容的HTML是否有效: 因此,当您提交“ b”时,您只会在内部表单中获得字段。提交“ a”时,您将得到减去“ b”中所有字段的所有字段。 如果不可能,那么针对这种情况有哪些解决方法可用? 问题答案: A. 无效的HTML或XHTML 在正式的W3C XHTML规范的B部分“元素禁止”中指出: 至于较早的[HTML 3.2规范,FORMS元素上的部分指出: “每个表单都必须包含