, die eigentlich eine gute Frage! Mit herkömmlichen jQuery-Datentabellen ist dies kein Problem, aber wir haben eine andere Art von deklarativem Setup mit eckigen Datentabellen, was die Trennung der verschiedenen Aufgaben erschwert. Wir können die Datenpopulation mit fromFnPromise
verzögern, verhindern jedoch nicht, dass die Datentabelle vor ihrer Verwendung instanziiert wird. Ich glaube, ich habe eine feste Lösung gefunden:
Zuerst zu vermeiden sofortige Initialisierung die datatable
Richtlinie aus dem Markup entfernen und gibt die <table>
ein id
statt, das heißt:
<table id="example" dt-options="dtOptions" dt-columns="dtColumns" />
dann die Datenressource laden, bauen dtColumns
und dtOptions
injiziert und schließlich das datatable
Attribut und die $compile
<table>
mit dem id
:
$http({
url: 'data.json'
}).success(function(data) {
var sample = data[0], dtColumns = []
//create columns based on first row in dataset
for (var key in sample) dtColumns.push(
DTColumnBuilder.newColumn(key).withTitle(key)
)
$scope.dtColumns = dtColumns
//create options
$scope.dtOptions = DTOptionsBuilder.newOptions()
.withOption('data', data)
.withOption('dataSrc', '')
//initialize the dataTable
angular.element('#example').attr('datatable', '')
$compile(angular.element('#example'))($scope)
})
Dies sollte mit jedem „Array von Objekten“ arbeiten Ressource
Demo ->http://plnkr.co/edit/TzBaaZ2Msd9WchfLDLkN?p=preview
NB: gereinigt Haben Sie das Beispiel JSON, ich denke, es war eine Probe, und nicht dazu gedacht, zu arbeiten, mit abschließenden Kommas.
Angabe von Spaltenüberschriften ist genial. – Anthony