2016-05-05 17 views
0

Angularjs NgTableを使用していますが、Angularjs Materialによって提供されたtabのページネーションを使用しています。これはうまく動作します。私は私のプロジェクトの多くの部分でそれを使用し、さまざまな部分で何度も再ロードしました。Angularjs - 再ロード時にNgTableが定義されていません

この場合、テーブルをリロードできません。何が問題なのか、どのようにしてリロードを行うのか分かりません。

私はDistribucionControllerでこの機能があります。

$scope.listaFacturaTierra = function() { 
    var idFactura = $stateParams.idFactura; 
    $facturaTierra = distribucionService.getStockTierra(idFactura); 
    $facturaTierra.then(function (datos) { 
     $scope.facturaTierra = datos.data; 
     var data = datos; 
     $scope.tableFacturaTierra = new NgTableParams({ 
      page: 1, 
      count: 8 
     }, { 
      total: data.length, 
      getData: function (params) { 
       data = $scope.facturaTierra; 
       params.total(data.length); 
       if (params.total() <= ((params.page() - 1) * params.count())) { 
        params.page(1); 
       } 
       return data.slice((params.page() - 1) * params.count(), params.page() * params.count()); 
      }}); 
    }); 
}; 

$scope.listaFacturaBebelandia = function() { 
    var idFactura = $stateParams.idFactura; 
    $facturaBebelandia = distribucionService.getStockBebelandia(idFactura); 
    $facturaBebelandia.then(function (datos) { 
     var data = datos.data; 
     $scope.facturaBebelandia = datos.data; 
     $scope.tableFacturaBebelandia = new NgTableParams({ 
      page: 1, 
      count: 10 
     }, { 
      total: data.length, 
      getData: function (params) { 
       data = $scope.facturaBebelandia; 
       params.total(data.length); 
       if (params.total() <= ((params.page() - 1) * params.count())) { 
        params.page(1); 
       } 
       return data.slice((params.page() - 1) * params.count(), params.page() * params.count()); 
      }}); 
    }); 
}; 
$scope.listaFacturaLibertador = function() { 
    var idFactura = $stateParams.idFactura; 
    $facturaLibertador = distribucionService.getStockLibertador(idFactura); 
    $facturaLibertador.then(function (datos) { 
     var data = datos.data; 
     $scope.facturaLibertador = datos.data; 
     $scope.tableFacturaLibertador = new NgTableParams({ 
      page: 1, 
      count: 10 
     }, { 
      total: data.length, 
      getData: function (params) { 
       data = $scope.facturaLibertador; 
       params.total(data.length); 
       if (params.total() <= ((params.page() - 1) * params.count())) { 
        params.page(1); 
       } 
       return data.slice((params.page() - 1) * params.count(), params.page() * params.count()); 
      }}); 
    }); 
}; 

彼らは細かい表示され、ページネーションは同様に働いています。

Angularjsを使用して要素を追加するngDialogは3つの関数を使用してプロセスを作成します。

は元本モーダルを表示:

$scope.distribuirModal = function (producto) { 
    $rootScope.modalProducto = producto; 
    ngDialog.open({ 
     template: 'views/modals/distribucion/modal-distribuir.html', 
     className: 'ngdialog-theme-advertencia', 
     showClose: false, 
     controller: 'DistribucionController', 
     closeByDocument: false, 
     closeByEscape: false 
    }); 
}; 

データのprocesssを作成し、確認のモーダルを示しています。このモーダルで

$scope.confirmarDistribuir = function (modalDistribuir) { 
    var control = 0; 
    control = modalDistribuir.tierra + modalDistribuir.bebelandia + modalDistribuir.libertador; 
    if (control === $rootScope.modalProducto.cantidadTotal) { 
     if (modalDistribuir.tierra !== null) { 
      $scope.wrapper.stockTierra.idProducto = $rootScope.modalProducto; 
      $scope.wrapper.stockTierra.cantidad = modalDistribuir.tierra; 
     } 
     if (modalDistribuir.bebelandia !== null) { 
      $scope.wrapper.stockBebelandia.idProducto = $rootScope.modalProducto; 
      $scope.wrapper.stockBebelandia.cantidad = modalDistribuir.bebelandia; 
     } 
     if (modalDistribuir.libertador !== null) { 
      $scope.wrapper.stockLibertador.idProducto = $rootScope.modalProducto; 
      $scope.wrapper.stockLibertador.cantidad = modalDistribuir.libertador; 
     } 
     ngDialog.open({ 
      template: 'views/modals/distribucion/confirmacion-distribuir.html', 
      className: 'ngdialog-theme-advertencia', 
      showClose: false, 
      controller: 'DistribucionController', 
      closeByDocument: false, 
      closeByEscape: false, 
      data: { 
       'wrapper': $scope.wrapper, 
       'producto': $rootScope.modalProducto 
      } 
     }); 
    } else { 
     $scope.alerts.push({ 
      type: 'danger', 
      msg: 'La cantidad total de productos a distribuir debe ser igual a la cantidad total de productos en almacen.' 
     }); 
    } 
}; 

私は私の上にデータを保存する機能を実行しますこの機能でAPI

$scope.finalizarDistribucion = function() { 
    $scope.sendWrapper = { 
     stockTierra: null, 
     stockBebelandia: null, 
     stockLibertador: null 
    }; 
    if ($scope.ngDialogData.wrapper.stockTierra.idProducto !== null && $scope.ngDialogData.wrapper.stockTierra.cantidad) { 
     $scope.sendWrapper.stockTierra = $scope.ngDialogData.wrapper.stockTierra; 
    } 
    if ($scope.ngDialogData.wrapper.stockBebelandia.idProducto !== null && $scope.ngDialogData.wrapper.stockBebelandia.cantidad) { 
     $scope.sendWrapper.stockBebelandia = $scope.ngDialogData.wrapper.stockBebelandia; 
    } 
    if ($scope.ngDialogData.wrapper.stockLibertador.idProducto !== null && $scope.ngDialogData.wrapper.stockLibertador.cantidad) { 
     $scope.sendWrapper.stockLibertador = $scope.ngDialogData.wrapper.stockLibertador; 
    } 
    $distribute = distribucionService.add($scope.sendWrapper); 
    $distribute.then(function (datos) { 
     if (datos.status === 200) { 
      ngDialog.closeAll(); 
      toaster.pop({ 
       type: 'success', 
       title: 'Exito', 
       body: 'Se ha distribuido con exito los productos.', 
       showCloseButton: false 
      }); 
     } 
    }); 
    $scope.$emit('updateTables', $scope.ngDialogData.producto); 
    $scope.$emit('updateStock', {}); 
}; 

私が行う2 $emit

最初のものは私のProductoControllerで私のオブジェクトProductoを更新して、細かい私の主要なテーブルに

$scope.$on('updateTables', function (event, object) { 
    var idFactura = parseInt($stateParams.idFactura); 
    object.estadoDistribucion = true; 
    $updateProducto = _productoService.update(object); 
    $updateProducto.then(function (datos) { 
     if (datos.status === 200) { 
      $rootScope.$broadcast('updateTableProducto', {'idFactura': idFactura}); 
     } 
    }); 
}); 

この最後の作品を更新問題なくテーブルを再読み込みする$broadcastを送ります。

$emitが問題であり、それは他の3つのテーブル

$scope.$on('updateStock', function() { 
    var idFactura = parseInt($stateParams.idFactura); 
    $facturaTierra = distribucionService.getStockTierra(idFactura); 
    $facturaTierra.then(function (datos) { 
     $scope.facturaTierra = datos.data; 
     $scope.tableFacturaTierra.reload(); 
    }); 
    $facturaBebelandia = distribucionService.getStockBebelandia(idFactura); 
    $facturaBebelandia.then(function (datos) { 
     $scope.facturaBebelandia = datos.data; 
     $scope.tableFacturaBebelandia.reload(); 
    }); 
    $facturaLibertador = distribucionService.getStockLibertador(idFactura); 
    $facturaLibertador.then(function (datos) { 
     $scope.facturaLibertador = datos.data; 
     $scope.tableFacturaLibertador.reload(); 
    }); 
}); 

をリロードする必要がありますが、ngTableの私のパラメータはundefinedあり、リロードが失敗しました。

誰かが私が間違っていることを知っていますか?

答えて

0

最後に何度も試した後、私は答えを得ました。私は$rootScope.onを書く場合には、3回を実行します。私は

$scope.$on('updateStock', function (event, object) { 
    var idFactura = parseInt($stateParams.idFactura); 
    $facturaTierra = distribucionService.getStockTierra(idFactura); 
    $facturaTierra.then(function (datos) { 
     $scope.facturaTierra = datos.data; 
     $scope.tableFacturaTierra.reload(); 
    }); 
    $facturaBebelandia = distribucionService.getStockBebelandia(idFactura); 
    $facturaBebelandia.then(function (datos) { 
     $scope.facturaBebelandia = datos.data; 
     $scope.tableFacturaBebelandia.reload(); 
    }); 
    $facturaLibertador = distribucionService.getStockLibertador(idFactura); 
    $facturaLibertador.then(function (datos) { 
     $scope.facturaLibertador = datos.data; 
     $scope.tableFacturaLibertador.reload(); 
    }); 
}); 

NOTEを使用して、私の別のコントローラにこの$broadcastを受けるに私ProductoController

まず私はその後、私のDistribucionController

$rootScope.$on('updateTableProducto', function (event, object) { 
    $list = _productoService.searchByIdFactura(object.idFactura); 
    $list.then(function (datos) { 
     $scope.productosFactura = datos.data; 
     $rootScope.$broadcast('updateStock', {}); 
     $scope.tableProductosFactura.reload(); 
    }); 
}); 

$broadcastをしました。だから$scopeではただ一つのループを作ります。

私はこれが誰かを助けてくれることを願っています。

関連する問題