更改ng-view和控制器时重新加载数据

时间:2015-09-14 16:50:24

标签: javascript angularjs node.js mongodb

我是角色的新手。

我有这个模块

    var uhuhapp = angular.module('uhuhapp',
['ngRoute','textAngular','ui.bootstrap',
'ngAnimate','ngCookies','720kb.socialshare']);

uhuhapp.config(function($routeProvider) {
  $routeProvider
   .when('/', {
    templateUrl: 'folders',
    controller: 'FoldersController',
  })
   .when('/folder/:id', {
    templateUrl: 'documents',
    controller: 'DocumentsController',
  })
   .when('/documents', {
    templateUrl: 'documents',
    controller: 'DocumentsController',

  })
   .when('/newdocument', {
    templateUrl: 'document',
    controller: 'NewDocumentController',
  })
  .otherwise({
    redirectTo: '/'
  });
});

好吧,如果我在“/ newdocument”中创建一个新项目,当我导航到另一个路径时,例如“/ documents”,则没有在ng-repeat中显示新项目,我必须重新加载。 / p>

“/ newdocument”的控制器:

    uhuhapp.controller('NewDocumentController',
['$scope','$http','folderService','documentService',
function($scope, $http, folderService, documentService){

  folderService.success(function(folders){
    $scope.folders = folders;
  });

  $scope.newDocumentData = {};

  $scope.createDocument = function(){
      $http.post('/api/documents', $scope.newDocumentData)
          .success(function(document) {
            $scope.newDocumentData = document;
          })
          .error(function(document) {
            console.log('Error:' + document);
          });
        };

    $scope.updateDocument = function(id){
        $http.put('/api/documents/' + id, $scope.newDocumentData)
            .success(function(document) {
              $scope.newDocumentData = document;
            })
            .error(function(document) {
              console.log('Error:' + document);
            });
          };

}]);

和/ documents的控制器:

    uhuhapp.controller('DocumentsController',
['$http','$scope','documentService', '$routeParams','$rootScope',
function($http, $scope, documentService, $routeParams,$rootScope){

  documentService.success(function(documents){

        $scope.documents = documents;
  });

}]);

当我在数据库中创建一个新项目并导航到另一个路径(例如“/ documents”)时,我需要做什么来升级控制器中的数据(例如“DocumentsController”)?

我在两个控制器“documentService”中使用相同的服务:

uhuhapp.factory('documentService',['$http',function($http){
  return $http.get('/api/documents')
    .success(function(data){
      return data;
    })
    .error(function(err){
      return err;
    });
}]);

我看到有关摘要,应用,观看和解决承诺的内容,但我不知道如何在我的应用中使用它们。

谢谢。

2 个答案:

答案 0 :(得分:0)

因此,当您返回/documents时,您的服务只运行一次。我在其中一个应用上遇到类似问题。尝试侦听routeChangeSuccess事件

$rootScope.$on('$routeChangeSuccess', function(event, next, current)
{ 
  documentService.success(function(documents)
  {
    $scope.documents = documents;
  });
});

您需要在控制器的依赖项中包含$rootScope。另一种方法是设置broadcast事件,您可以监听自定义事件,如:

$rootScope.$broadcast('reloadDocuments'); // - 广播您的自定义事件

&安培;

$scope.$on('reloadDocuments', function(){...}); // - 听取您的活动,并在功能中运行documentService电话

答案 1 :(得分:0)

每次进入文档视图时都可以通过解决方法来解决这个问题

.when('/documents', {
    templateUrl: 'documents',
    controller: 'DocumentsController',
    resolve:{
        document: function(documentService){
          return documentService.success(function(documents)
          {
            return documents;
          });
        }
    }    
})  

并在您的控制器中

 uhuhapp.controller('DocumentsController',
['$http','$scope','documentService', 'document', '$routeParams','$rootScope',
function($http, $scope, documentService,document, $routeParams,$rootScope){
   $scope.documents = document;                               
}]);

如果在服务中你的$ http.get文件的缓存为true,则将其变为false

好的,在你的控制器中尝试这个,看看来自呼叫的是否有任何缓存。

var cache = $cacheFactory.get('$http');
var get = cache.get('/api/documents');
console.log(get);