我開始使用ocLazyload來延遲加載我的AngularJs控制器中的幾個。我用它一起$routeProvider
像這樣當使用ocLazyLoad時注入延遲加載的AngularJS控制器
$routeProvider.when("/login", {
templateUrl: "login.html",
resolve: {
loadCtrl: ['$ocLazyLoad', function($ocLazyLoad) {
return $ocLazyLoad.load('LoginCtrl.js');
}]
}
}).
和這工作正常。
我有另一個路由定義,它使用resolve
屬性來加載控制器之前解決一些項目。
when("/dashboard", {
templateUrl: "dashboard.html",
controller: "DashboardCtrl",
resolve: {
profileData: getProfile,
count : getCount
}
}).
現在我想延遲加載該控制器也和我想它像在這種情況下,這個
when("/dashboard", {
templateUrl: "dashboard.html",
resolve: {
profileData: getProfile,
count : getCount,
loadCtrl: ['$ocLazyLoad', function($ocLazyLoad) {
return $ocLazyLoad.load(['DashboardCtrl.js']);
}]
}
}).
該頁面加載,但profileData
和count
不會被注入到控制器。控制器的定義如下。
var app = angular.module('gt');
app.controller('DashboardCtrl', ['$scope', '$rootScope', 'profileData', 'count',
function($scope, $rootScope, profileData, count) {
...
}]);
在調試時,我意識到getProfile
和getCount
GET方法的調用,但它是異步進行的,並且控制器也懶的負載,而無需等待這些方法。如何在同一時間注入和延遲加載?我可以使用承諾以任何方式解決此問題嗎?
我使用AngularJS 1.3.10 & ocLazyLoad 1.0.5版本
getProfile
功能參考
var getProfile = function($q, $http, Profile, localStorageService) {
var deferred = $q.defer();
if (!localStorageService.get("loggedInUser")) {
$http.post('/loggedin').success(function(user) {
if (user) {
localStorageService.set("loggedInUser", user.email)
Profile.get(localStorageService.get("loggedInUser"), function(profileData) {
if (profileData) {
deferred.resolve(profileData);
} else {
deferred.resolve();
}
});
} else {
deferred.reject();
}
});
} else {
Profile.get(localStorageService.get("loggedInUser"), function(profileData) {
if (profileData) {
deferred.resolve(profileData);
} else {
deferred.resolve();
}
});
}
return deferred.promise;
}
getProfile.$inject = ["$q", "$http", "Profile", "localStorageService"];
這是一個有用的信息。 –