2017-06-22 81 views
0

我正在使用angular-datatables v0.5.x,我想加载本地JSON对象。根据我的研究,我知道我必须使用promise。从我的console.log我可以看到,deferred.promise填充了json数据。所以我认为它被正确地返回到DTOptionsBuilder.fromFnPromise()。但是,数据表中没有显示任何数据。任何帮助将非常感激! HTML:使用promise和json对象的角度数据表不显示数据

<table datatable="ng" dt-options="dtOptions" dt-columns="dtColumns" dt-instance="dtInstance" class="row-border stripe compact hover"> 
</table> 

AngularJS控制器:

var getTableData = function(jsonObj) { 
    console.log('get table data function'); 
    var deferred = $q.defer(); 
    deferred.resolve(jsonObj); 
    console.log(deferred.promise); 
    return deferred.promise; 
}; 

$scope.dtOptions = DTOptionsBuilder.fromFnPromise(getTableData(jsonObj)) 
    .withPaginationType('full_numbers'); 

$scope.dtColumns = [ 
    DTColumnBuilder.newColumn('col1').withTitle('Column 1'), 
    DTColumnBuilder.newColumn('col2').withTitle('Column 2'), 
    DTColumnBuilder.newColumn('col3').withTitle('Column 3'), 
    DTColumnBuilder.newColumn('col4').withTitle('Column 4') 
        ]; 
$scope.dtInstance = {}; 

JSON对象:

[{ 
    "col1": "Column 1", 
    "col2": "Column 2", 
    "col3": "Column 3", 
    "col4": "Column 4" 
}] 
+0

我没有看到任何'$ scope.dtOptionsTransactionsByPOS',非此非彼'$ scope.dtColumnsTransactionsByPOS'。即使dtinstance是不正确的,你将未定义的值分配给你的数据表,因此它不能以任何方式工作。 – briosheje

+0

很抱歉,我改了这个例子的名字。那些应该是dtOptions,dtColumns,dtInstance。我会编辑它。 –

回答

-1

请问你的表预期的列被作为一个对象或对象数组提供?

我看到你传递给表的JSON对象是一个对象数组!

尝试通过

{ 
    "col1": "Column 1", 
    "col2": "Column 2", 
    "col3": "Column 3", 
    "col4": "Column 4" 
} 

或者改变

$scope.dtOptions = DTOptionsBuilder.fromFnPromise(getTableData(jsonObj)) 
.withPaginationType('full_numbers'); 

$scope.dtOptions = DTOptionsBuilder.fromFnPromise(getTableData(jsonObj[0])) .withPaginationType('full_numbers');

+0

我希望它会是一个对象数组。否则,我无法将多行添加到数据表。由于我只测试我只有一个对象。 –

+1

无论您使用的是什么类型的数据源,远程或无法使用普通的JSON或复杂的服务器响应,都应**总是**将对象数组传递给dataTable。唯一的例外是您可以传递一组字符串数组,仅仅为了向后兼容。这就是dataTables的工作原理。 – davidkonrad