Угловой Datatable не работает с данными
я использую угловой-datatable для отображения данных и его работы со статическими данными, но когда динамическое предоставление данных не работает. Это отнимает у меня много времени.
чего я хочу достичь, это загрузить данные из
ajax
наdatatable
.
следующий код я использую для инициализации, и его работает нормально Plunker:
function MyChapterController($scope, $q, DTOptionsBuilder, DTColumnBuilder, chapter) {
var vm = this;
vm.dtOptions = DTOptionsBuilder.newOptions()
.withPaginationType('full_numbers')
.withDisplayLength(2)
.withDOM('pitrfl');
vm.dtColumns = [
DTColumnBuilder.newColumn('id').withTitle('ID'),
DTColumnBuilder.newColumn('title').withTitle('First name'),
DTColumnBuilder.newColumn('lastName').withTitle('Last name').notVisible()
];
vm.myChapters = [];
}
Это следующий код не работает проверка Plunker:
function MyChapterController($scope, $q, $resource, DTOptionsBuilder, DTColumnBuilder, chapter) {
var vm = this;
vm.dtOptions = DTOptionsBuilder.newOptions()
.withPaginationType('full_numbers')
.withDisplayLength(2)
.withDOM('pitrfl');
vm.dtColumns = [
DTColumnBuilder.newColumn('id').withTitle('ID'),
DTColumnBuilder.newColumn('title').withTitle('First name'),
DTColumnBuilder.newColumn('lastName').withTitle('Last name').notVisible()
];
vm.myChapters = [{
"id": 860,
"firstName": "Superman",
"lastName": "Yoda"
}, {
"id": 870,
"firstName": "Foo",
"lastName": "Whateveryournameis"
}, {
"id": 590,
"firstName": "Toto",
"lastName": "Titi"
}, {
"id": 803,
"firstName": "Luke",
"lastName": "Kyle"
}];
}
Я также пробовал с dataresource
Plunker но и тут не повезло.
Это уже отняло у меня много времени. В конце концов я решил воспользоваться вашим советом. Любая помощь будет оценена.
1 ответов
вы пропустили два момента:
- контроллер не вызывался, потому что он не был добавлен в разметку. Если вы будете использовать
ui-router
позже это нормально, потому что тогда вы можете добавить контроллер в конфигурацию. - ваша таблица не была заполнена, потому что вы пропустили добавление привязки, например
{{chapter.id}}
иmyChapters
недоступен в$scope
потому что вы используетеcontrollerAs
синтаксис.
пожалуйста, посмотрите на демо ниже или в этой обновленной plunkr.
в демо ниже, я только изменил $http.get(...)
to $http.jsonp(...)
чтобы получить данные json от моки.io.
обновление
чтобы сделать фильтр разбиением на страницы, вы должны изменить разметку таблицы на это.
<table datatable="ng" dt-options="chapterCtrl.dtOptions" dt-column-defs="chapterCtrl.dtColumnDefs" id="cb-mychapter-table" class="row-border hover table table-bordered cb-data-table" cellspacing="0" width="100%">
// Code goes here
'use strict';
angular.module('myApp', ['datatables','ngResource']);
(function (angular) {
'use strict';
angular
.module('myApp')
.controller('myChapterController', MyChapterController)
.factory('chapter', ChapterFactory);
MyChapterController.$inject = ['$scope', '$q', '$resource', 'DTOptionsBuilder', 'DTColumnBuilder', 'chapter'];
function MyChapterController($scope, $q, $resource, DTOptionsBuilder, DTColumnBuilder, chapter) {
var vm = this;
vm.dtOptions = DTOptionsBuilder.newOptions()
.withPaginationType('full_numbers')
.withDisplayLength(2)
.withDOM('pitrfl');
vm.dtColumns = [
DTColumnBuilder.newColumn('id').withTitle('ID'),
DTColumnBuilder.newColumn('title').withTitle('First name'),
DTColumnBuilder.newColumn('lastName').withTitle('Last name').notVisible()
];
/*vm.myChapters = [{
"id": 860,
"firstName": "Superman",
"lastName": "Yoda"
}, {
"id": 870,
"firstName": "Foo",
"lastName": "Whateveryournameis"
}, {
"id": 590,
"firstName": "Toto",
"lastName": "Titi"
}, {
"id": 803,
"firstName": "Luke",
"lastName": "Kyle"
}];*/
chapter.getChapters().then(function(chapters) {
vm.myChapters = chapters;
});
}
ChapterFactory.$inject = ["$http"];
function ChapterFactory($http) {
return {
getChapters: function() {
return $http.jsonp('http://www.mocky.io/v2/55f2b4cb0938f5cd069cff10?callback=JSON_CALLBACK').then(function(response) {
console.log(response);
return response.data;
});
}
};
}
}(angular));
<!DOCTYPE html>
<html ng-app='myApp'>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<!--<link rel="stylesheet" href="style.css">-->
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.9/js/jquery.dataTables.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular.min.js"></script>
<script src="https://cdn.rawgit.com/l-lin/angular-datatables/dev/dist/angular-datatables.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular-resource.min.js"></script>
<!--<script src="script.js"></script>-->
</head>
<body ng-controller="myChapterController as chapterCtrl" >
<table datatable="ng" dt-options="chapterCtrl.dtOptions" dt-column-defs="chapterCtrl.dtColumnDefs" id="cb-mychapter-table" class="row-border hover table table-bordered cb-data-table" cellspacing="0" width="100%">
<thead>
<tr>
<th>ID</th>
<th>FirstName</th>
<th>LastName</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="chapter in chapterCtrl.myChapters">
<td>{{chapter.id}}</td>
<td>{{chapter.firstName}}</td>
<td>{{chapter.lastName}}</td>
</tr>
</tbody>
</table>
</body>
</html>