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 angular+unsubscr...@googlegroups.com.
To post to this group, send email to angular@googlegroups.com.
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to