[英]Using a factory as source data in angular-datatables doesn't work
是否可以将工厂用作角度数据表中的源数据?
基本上,我希望返回变量中的数据并将其用作源数据。
更新(06/22/2016)
现在这是我的工厂:
statisticsModule.factory('globalFactory', function($rootScope, $http){ var globalFactory = {}; globalFactory.getUrl = function(){ return $http.get('../statistics/php/config_statistics.json'); }; return globalFactory; });
这是我的控制器
statisticsModule.controller("dataController", dataController); //Fin controlador function dataController($scope, $http, globalFactory, DTOptionsBuilder, DTColumnBuilder){ //Promise con el factory globalFactory.getUrl().then(function(response){ //Obtener data var urlGlobal = response.data; //Filtrar data. arrayReportBD : Arreglo con las URL de los reportes var deserialize = angular.fromJson(urlGlobal.config.graph_conf_array.arrayReportBD); //Data Distribución de Estatus var urlStatus = deserialize[0]; //Obtener data de Distribución de Estatus $http.get(urlStatus).success(function(data){ console.log(data); var vm = this; vm.dtOptions = DTOptionsBuilder.fromSource(data) .withDOM('lfrtip') .withPaginationType('full_numbers') .withLanguage({ "sEmptyTable": "No hay datos para cargar en la tabla", "sInfo": "Mostrando _START_ de _END_ de _TOTAL_ entradas", "sInfoEmpty": "Mostrando 0 de 0 de 0 entradas", "sInfoFiltered": "(filtradas _MAX_ entradas totales)", "sInfoPostFix": "", "sInfoThousands": ",", "sLengthMenu": "Mostrar _MENU_ entradas", "sLoadingRecords": "Cargando...", "sProcessing": "Procesando...", "sSearch": "Buscar:", "sZeroRecords": "No se encontraron registros", "oPaginate": { "sFirst": "Primera", "sLast": "Última", "sNext": "Siguiente", "sPrevious": "Anterior" }, "oAria": { "sSortAscending": ": activar para ordenar de forma ascendente", "sSortDescending": ": activar para ordenar de forma descendente" } }); vm.dtColumns = [ DTColumnBuilder.newColumn('gob_code').withTitle('Cód. Gob.'), DTColumnBuilder.newColumn('fci_code').withTitle('Cód. FCI'), DTColumnBuilder.newColumn('name').withTitle('NOMBRE'), DTColumnBuilder.newColumn('status').withTitle('ESTATUS') ]; }).error(function(err){ });//Fin $http });//Fin promise }//Fin función
PD:
**已解决06/23/2015 **
很难,但最终我可以解决!
var statisticsModule = angular.module("statisticsModule", ['datatables', 'datatables.bootstrap']); //Bootstrap was added for best views
statisticsModule.factory('globalFactory', function($rootScope, $http){ var globalFactory = {}; globalFactory.getUrl = function(){ return $http.get('../statistics/php/reports/r_reports_status.php').success(function(data){ }); }; return globalFactory; }); //Factory pointing to specific URL that contains the data
statisticsModule.controller("dataController", dataController); function dataController(DTOptionsBuilder, DTColumnBuilder, $scope, globalFactory){ var vm = this; //Return data from factory vm.dtOptions = DTOptionsBuilder.fromFnPromise(function(){ return globalFactory.getUrl().then(function(response){ return response.data; }) }) .withDOM('lfrtip') .withPaginationType('full_numbers') //Language Spanish (optional) .withLanguage({ "sEmptyTable": "No hay datos para cargar en la tabla", "sInfo": "Mostrando _START_ de _END_ de _TOTAL_ entradas", "sInfoEmpty": "Mostrando 0 de 0 de 0 entradas", "sInfoFiltered": "(filtradas _MAX_ entradas totales)", "sInfoPostFix": "", "sInfoThousands": ",", "sLengthMenu": "Mostrar _MENU_ entradas", "sLoadingRecords": "Cargando...", "sProcessing": "Procesando...", "sSearch": "Buscar:", "sZeroRecords": "No se encontraron registros", "oPaginate": { "sFirst": "Primera", "sLast": "Última", "sNext": "Siguiente", "sPrevious": "Anterior" }, "oAria": { "sSortAscending": ": activar para ordenar de forma ascendente", "sSortDescending": ": activar para ordenar de forma descendente" } }) //More options for best views .withDisplayLength(1) .withOption('responsive', true) .withBootstrap(); //BELOW GOES vm.dtColumns and } that ends the function
<!--THIS IS THE ORDER--> <head> <!--JQUERY SCRIPT--> <!--JQUERY DATATABLES SCRIPT--> <!--ANGULAR SCRIPT--> <!--ANGULAR DATATABLE SCRIPT--> <!--ANGULAR DATATABLE CSS--> <!--DATATABLES BOOTSTRAP CSS--> <!--DATATABLES RESPONSIVE CSS--> <!--MODULE--> <!--CONTROLLER--> <!--FACTORY--> <!--ANGULAR DATATABLES BOOTSTRAP SCRIPT--> <!--BOOTSTRAP SCRIPT--> </head> <body> <div ng-controller="dataController as showCase"> <table datatable="" dt-options="showCase.dtOptions" dt-columns="showCase.dtColumns" class="table table-striped table-bordered"></table> </div> <!--DATATABLES RESPONSIVE SCRIPT--> </body>
代码应该更像这样。
厂
statisticsModule.factory('globalFactory', ['$http', function ($http) {
var GetStatistics = function () {
return $http.get('../statistics/php/config_statistics.json');
};
return {
GetStatistics: GetStatistics
}
}]);
控制者
statisticsModule.controller("tableController", ['globalFactory', '$http',
function (globalFactory, $http) {
//.success is obsolete.
globalFactory.GetStatistics().then(function (response) {
//success
// Initialize DataTable here
}, function (response) {
//fail
//alert(response.data);
});
}]);
- 在我的尝试中,控制台向我抛出错误:
[ng-areq] statusController not a function got undefined
不明白为什么在注册控制器时将statusController
作为参数传递。 删除那个。
更新资料
您也可以使用服务
statisticsModule.service('globalService', ['$http', function ($http) {
this.GetStatistics = function () {
return $http.get('../statistics/php/config_statistics.json');
};
}]);
然后像这样在控制器中调用它
globalService.GetStatistics().then(function (response) {
//success
// Initialize DataTable here
}, function (response) {
//fail
//alert(response.data);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.