AngularJs コントローラーのいくつかを遅延ロードするために ocLazyload を使い始めました。$routeProvider
私はこのようなものと一緒にそれを使用しました
$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
andcount
はコントローラーに挿入されません。コントローラの定義は次のとおりです。
var app = angular.module('gt');
app.controller('DashboardCtrl', ['$scope', '$rootScope', 'profileData', 'count',
function($scope, $rootScope, profileData, count) {
...
}]);
getProfile
デバッグ時に、メソッド get が呼び出されていることに気付きましたが、getCount
非同期で発生し、コントローラーもこれらのメソッドを待たずに遅延ロードします。注入と遅延ロードを同時に行うにはどうすればよいですか? これを何らかの方法で解決するために promise を使用できますか?
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"];