【问题标题】:Use data from array in HandsonTable Angular directive在 HandsonTable Angular 指令中使用数组中的数据
【发布时间】:2023-04-02 15:51:02
【问题描述】:

我正在尝试使用数组作为我在使用 Angular 指令创建的 HandsoneTable 中的某些列的数据源。但是,当对数据属性使用通用数组表示法 (name[0]) 时,该特定表格单元格中不会呈现任何内容。我做错了什么还是不应该按照我想要的方式工作?

我的数据来源:

$scope.data = [
    {
        'name': ['Bob', 'Bobson'],
        'email': 'bob@sample.com'
    },
    {
        'name': ['John', 'Johnson'],
        'email': 'john@sample.com'
    }
];

还有我的模板:

<div ng-app="Test">
    <div ng-controller="tableCtrl">
        <hot-table datarows="data">
            <hot-column data="name[0]"></hot-column>
            <hot-column data="name[1]"></hot-column>
            <hot-column data="email"></hot-column>
        </hot-table>
     </div>
</div>

在此处查看简单示例:https://jsfiddle.net/9qzo3wnv/4/

【问题讨论】:

    标签: javascript angularjs handsontable


    【解决方案1】:

    从技术上讲,不可能在 data 属性上使用数组表示法 (name[0]),但您还有其他几个选项可以完成某事:

    解决方案 1

    将您的数据转换为对象。

    示例:https://jsfiddle.net/4yuv1vyu/

    $scope.data = [
      {
        'name': {0:'Bob',1:'Bobson'},
        'email': 'bob@sample.com'
      },
      {
        'name': {0:'John',1: 'Johnson'},
        'email': 'john@sample.com'
      }
    ];
    

    解决方案 2

    通过控制器中的函数将数组转换为对象:

    示例:https://jsfiddle.net/vypahad6/

    详情:https://stackoverflow.com/a/4215753/3298029

    $scope.toObject = function(arr) {
      var rv = {};
      for (var i = 0; i < arr.length; ++i)
        rv[i] = arr[i];
      return rv;
    }
    
    for (var d in $scope.data) {
      $scope.data[d].name = $scope.toObject($scope.data[d].name);
    }
    

    解决方案 3

    利用handsontable的自定义单元格渲染器功能:

    示例:https://jsfiddle.net/sbkwcfr5/

    详情:http://docs.handsontable.com/0.24.1/demo-custom-renderers.html

    View:
    <hot-column data="name" renderer="customRendererName"></hot-column>
    
    Controller:
    $scope.customRendererName = function(instance, td, row, col, prop, value, cellProperties) {
      var html = Handsontable.helper.stringify(value[0]);
      td.innerHTML = html;
      return td;
      return value[0];
    }
    

    【讨论】:

    • 我一定是未能在我的 Fiddle 上保存我选择的设置,我知道我已经运行了代码。使用您提出的符号并不能真正解决我的问题,因为我从外部来源获取数据并且不想重新排列它。
    • 如果您不想重新排列它,您可以将其转换为如下所述的对象:stackoverflow.com/a/4215753/3298029
    • 另一种解决方案是使用handsonable 的单元格渲染器功能。这是我为您的案例创建的示例:jsfiddle.net/sbkwcfr5
    • 我想我的问题的正确答案是“不,它不应该与热列标签的数据属性中的数组索引一起使用”。
    • 您是否看过解决方案 Nr 3?
    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多