繁体   English   中英

在角度数据表中使用工厂作为源数据不起作用

[英]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:

  1. 实际上,我将datatables-scripts放置在正确的位置,如果我使用直接URL中的数据作为源,则视图将完美加载。
  2. 我已经在html标签中添加了ng-app
  3. 我希望构建数据表的功能使用过滤的数据

**已解决06/23/2015 **

很难,但最终我可以解决!

  1. 第一步:创建模块:

 var statisticsModule = angular.module("statisticsModule", ['datatables', 'datatables.bootstrap']); //Bootstrap was added for best views 

  1. 第二步:创建工厂

 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 

  1. 第三步:创建控制器

 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 

  1. 最后,第四步:进入视图

 <!--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);
    });
}]);
  1. 在我的尝试中,控制台向我抛出错误: [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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM