2013-03-19 77 views
0

我想在加載來自服務器的數據時顯示我的模板。AngularJS:在控制器收到所有數據後加載templateUrl

我創建了一個名爲Services的模塊,裏面有一些服務來加載我的數據,我對我的例子使用HomeService。

var app = angular.module('MyApp', ['Services']); 

app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider 
     .when('/', 
     { 
      templateUrl: 'home.html', 
      controller: 'Home_Ctrl', 
      resolve: { 
       loadData: //?? 
      } 
     }); 
}]); 

app.controller('Home_Ctrl', ['$scope', 'HomeService', function($scope, HomeService) { 

    $scope.data = HomeService.getData(); 

} 

我想我需要創建一個承諾做到這一點。是否有可能把這個功能放在我的控制器裏面?

我的意思是,我不希望這樣的事情:

var ctrl = app.controller('Home_Ctrl', ['$scope', 'HomeService', function($scope, HomeService) { 
    //Do something 
} 

//Promise 
ctrl.fct = function($q) { 
} 

我想這樣的事情:

app.controller('Home_Ctrl', ['$scope', '$q', 'HomeService', function($scope, $q, HomeService) { 

    //Do something 

    //Promise 
    this.fct = function() {} 
} 

任何想法?

謝謝。

回答

2

您可以使用控制器的resolve屬性。 您可以創建一個對象,它將在控制器定義返回的承諾,並分配到控制器的決心功能和注入相同的好心看的很簡單的例子

$routeProvider.when('/ExitPoll', { 
     templateUrl: '/partials/ExitPoll.html', controller: exitpollController, resolve: { 
      responseData: ['$http', function ($http) { 
       return $http.get('/Candidate/GetExitPolls/hissar').then(function (response) { 
        return response.data; 
       }); 
      }], 

     } 
    }); 


var exitpollController = ['$scope', '$http','responseData','$rootScope', 
function ($scope, $http, responseData, $rootScope) { 
}]; 
相關問題