2016-03-03 87 views
1

我想使用Angular指令创建的HandsoneTable中的一些列中的数组作为数据源。但是,对数据属性使用常用数组符号(name[0])时,该特定的表格单元格中将不显示任何内容。我做错了什么,或者这不应该按照我想要的方式工作?在HandsonTable中使用数组的数据Angular指令

我的数据源:

$scope.data = [ 
    { 
     'name': ['Bob', 'Bobson'], 
     'email': '[email protected]' 
    }, 
    { 
     'name': ['John', 'Johnson'], 
     'email': '[email protected]' 
    } 
]; 

而且我的模板:

<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/

回答

1

技术上是不可能使用数组表示法(名称[0 ])的数据属性,但你有几个其他的选择来完成一些事情:

解决方案1 ​​

改为将数据转换为对象。

实施例:https://jsfiddle.net/4yuv1vyu/

$scope.data = [ 
    { 
    'name': {0:'Bob',1:'Bobson'}, 
    'email': '[email protected]' 
    }, 
    { 
    'name': {0:'John',1: 'Johnson'}, 
    'email': '[email protected]' 
    } 
]; 

溶液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]; 
} 
+0

我必须在我的小提琴上保存我选择的设置失败,我知道我已经运行了代码。 使用你提出的符号并不能真正解决我的问题,因为我从外部来源获取数据,并且不想重新排列它。 – madcap

+0

如果你不想重新排列它,你可能可以将它转换为像这里描述的对象:http://stackoverflow.com/a/4215753/3298029 –

+0

这是一个更新的小提琴:https://jsfiddle.net/ Ltgssgo6/ –