簡體   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