Hi,
I make some test on the new router and try to make dynamic redirect based
on a promise but I am not able to do it.
I have a service file with the following code which return a service with
some data coming from a CRUD API
// app.services.js
(function() {
'use strict';
angular
.module('app')
.factory('GetSiteID', ['$http', GetSiteID])
.factory('GetTemplate', ['GetSiteID', '$http', '$q', GetTemplate])
.factory('GetPages', ['GetSiteID', '$http', '$q', GetPages])
.factory('GetPagesData', ['GetPages', '$http', '$q', GetPagesData])
.factory('GetHomePage', ['GetPages', '$http', '$q', GetHomePage])
.factory('GetHomePageLayout', ['GetHomePage', '$http', '$q',
GetHomePageLayout])
.factory('SharedData', ['GetSiteID', 'GetTemplate', 'GetPages',
'GetPagesData', 'GetHomePage', 'GetHomePageLayout', '$q', SharedData]);
var service = {};
/////////////////////
function GetSiteID($http) {
return $http.get('config.json')
.then (function(response) {
service.siteID = response.data._id;
//console.log('GetSiteID: ' + service.siteID);
return service.siteID
});
}
function GetTemplate(GetSiteID, $http, $q) {
return GetSiteID
.then(function(value) {
return $http.get('/api/sites/' + value)
.then (function(response) {
service.template = response.data.template;
//console.log('GetTemplate: ' + service.template);
return service.template;
})
})
}
function GetPages(GetSiteID, $http, $q) {
return GetSiteID
.then(function(value) {
return $http.get('/api/sites/' + value)
.then (function(response) {
service.pages = response.data.pages;
//console.log('GetPages: ' + service.pages);
return service.pages;
})
})
}
function GetPagesData(GetPages, $http, $q) {
return GetPages
.then(function(response) {
var pagesDataArray = [];
angular.forEach(response, function(value) { // do loop on each page then
get data
return $http.get('/api/pages/' + value)
.then (function(response) {
pagesDataArray.push(response.data);
service.pagesData = pagesDataArray;
//console.log(service.pagesData);
return service.pagesData
})
})
})
}
function GetHomePage(GetPages, $http, $q) {
return GetPages
.then(function(response) {
var pagesArray = [];
angular.forEach(response, function(value) {
pagesArray.push(value);
})
//console.log(pagesArray);
for (var i=0; i<pagesArray.length; i++) {
return $http.get('/api/pages/' + response[i])
.success (function(response) {
if (response.hasOwnProperty("isHomePage") && response.isHomePage === true) {
//console.log(response);
service.homePage = response._id;
service.homePageUrl = response.friendlyUrl;
return {
homePage : service.homePage,
homePageUrl : service.homePageUrl
}
}
})
}
})
}
function GetHomePageLayout(GetHomePage, $http, $q) {
return GetHomePage
.then(function() {
//console.log('HomePage ID is: ' + service.homePage);
//console.log('HomePage URL is: ' + service.homePageUrl);
return $http.get('/api/pages/' + service.homePage)
.then (function(response) {
service.layout = response.data.layout;
//console.log('Layout is: ' + service.layout)
return service.layout;
})
})
}
function SharedData(GetSiteID, GetTemplate, GetPages, GetPagesData,
GetHomePage, GetHomePageLayout, $q) {
return $q.all([GetSiteID, GetTemplate, GetPages, GetPagesData, GetHomePage,
GetHomePageLayout])
.then (function(response) {
//console.log(service);
return service;
});
}
})();
console.log(service); return an object with all data needed. I use this
service by calling SharedData in the router file as follow
// app.router.controller.js
(function() {
'use strict';
angular
.module('app')
.controller('RouterController', RouterController);
RouterController.$inject = ['SharedData', '$router'];
function RouterController(SharedData, $router) {
var homePageUrl;
SharedData.then(function(service) {
console.log(service.homePageUrl); //return home
homePageUrl = service.homePageUrl;
return homePageUrl;
});
$router.config([
{ path: '/', redirectTo: '/page/' + homePageUrl }, // SHOULD REDIRECT TO A
DYNAMIC HOME PAGE
{
path: '/', components:
{
nav: 'nav',
page: 'page',
header: 'header',
title: 'title',
main: 'main',
bottom: 'bottom',
footer: 'footer'
}
},
{
path: '/page/:friendlyUrl', components:
{
nav: 'nav',
page: 'page',
header: 'header',
title: 'title',
main: 'main',
bottom: 'bottom',
footer: 'footer'
}, as : 'page'
}
]);
}
})();
where service.homePageUrl return home but the redirectTo does not works!
There is no redirect with undefined. I was expecting a redirect to
/page/home
Any help would be appreciated to help me understand what going wrong and
understand better how promise works
Regards
Greg
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.