在angularjs中加载服务后的视图

在angularjs中加载服务后的视图,angularjs,angularjs-service,Angularjs,Angularjs Service,在我的angular应用程序中,我有一个视图、一个控制器和一个服务。 服务加载资源ex:service load persons,并使用结果初始化值。 我想在我的服务完成他的功能后加载我的视图以加载他的资源 var myApp = angular.module('myApp',[]); myApp.controller('PersonsCtrl', ($scope, Persons) { $scope.persons = Persons.data; }); myApp.factory

在我的angular应用程序中,我有一个视图、一个控制器和一个服务。 服务加载资源ex:service load persons,并使用结果初始化值。 我想在我的服务完成他的功能后加载我的视图以加载他的资源

var myApp = angular.module('myApp',[]);

myApp.controller('PersonsCtrl', ($scope, Persons) {
    $scope.persons = Persons.data;
});

myApp.factory('Persons', {
    data: [[function that load resources => take time]]
});
所以我想在我的服务完成初始化时加载我的控制器。
一些想法?

假设您有一个路由提供商,下面是一个基本示例。当承诺得到解决时,“personData”将被注入控制器。没有太多关于你的服务的信息,所以我不得不给出一些非常一般的信息

myApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider
        .when('/persons', {
            controller: 'PersonsCtrl',
            templateUrl: 'persons.html',
            resolve: {
                personData: ['Persons', function(Persons) {
                    return Persons.getData();
                }]
            }
        });
}]);

myApp.controller('PersonsCtrl', ($scope, personData) {
    $scope.persons = personData;
});

myApp.factory('Persons', {
    getData: function() {//function that returns a promise (like from $http or $q)};
});

也许可以尝试使用承诺,下面的例子

var myApp = angular.module('myApp',[]);

myApp.controller('PersonsCtrl', ($scope, Persons) {
    $scope.persons = Persons.getData().then(function(response){
        //do whatever you want with response
    });
});

myApp.factory('Persons', function ($http, $q) {
    return {
        getData: function () {
            var def = $q.defer();
            $http.get('url').
                success(function (response) {
                    def.resolve(response);
                })
            return def.promise();
        }
    }
});

尝试路由定义中的
resolve
属性还可以查看$q服务承诺Hanks doodeec和koolunix,这是解决方案=>resolve:+$q完成数据后,启动所有应用程序