【问题标题】:How to store sort function and get it from db如何存储排序功能并从数据库中获取
【发布时间】:2021-07-12 10:22:19
【问题描述】:

我的 Angular 应用程序中有一个带有表格的组件,该表格使用来自服务器的数据获取列的定义。在 db 列的定义中存储在 jsonb 中。 Angular 应用程序中的类有下一个定义:

export class Table {
  id: number;
  name: string;
  columnsDefinition: ColumnDefinition[];
}

export class ColumnDefinition {
  key: string;
  title: string;
  sortOrder: NzTableSortOrder | null;
  sortFn: NzTableSortFn | null;  // store function for sorting column
  sortFnString: string;  // this is function in string that i get from db
}

我应该使用哪个函数将字符串转换为 NzTableSortOrder 类型? 我试过了(只是草稿)

tables.pipe(
  map(tables => { 
    tables.map(t => { 
      t.columnsDefinition.map(definition => { 
        definition.sortOrder = JSON.parse(definition.sortFnString) 
      }) 
    }) 
}))

但有一个例外“意外的令牌(在 JSON 中” 在库类型的示例中,NzTableSortFn 有下一个定义:

sortFn: (a: DataItem, b: DataItem) => a.name.localCompare(b.name) // for sort by name

或者也许我可以一次将函数存储在 json 中,而无需从字符串中转换它

【问题讨论】:

  • JSON 实际上不支持功能恐怕..?
  • 解析前API跟踪值返回的definition.sortFnString的内容是什么,然后在此处键入以再次检查它是否为有效的json格式

标签: json angular typescript


【解决方案1】:

在 db 中存储函数可能很危险,并且存在一些限制。但是你可以做到。例如,您可以将比较函数存储为字符串 "(a, b) => a > b" 并使用 eval 将字符串转换为函数:eval("(a, b) => a > b")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2010-11-13
    • 2019-12-20
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多