在angularjs中加载服务后的视图
在我的angular应用程序中,我有一个视图、一个控制器和一个服务。 服务加载资源ex:service load persons,并使用结果初始化值。 我想在我的服务完成他的功能后加载我的视图以加载他的资源在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
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完成数据后,启动所有应用程序