2013-12-19 3 views
9

Я бы хотел, чтобы метод route.resolve запускался, прежде чем запускается фактический код маршрута. К сожалению, в приведенном ниже коде функция prime() вызывается, но она называется асинхронно, и код маршрута вызывается до завершения цикла. Я думал, что методы разрешения маршрута должны были завершиться до загрузки маршрута?

(function() { 
'use strict'; 

var app = angular.module('app'); 

// Collect the routes 
app.constant('routes', getRoutes()); 

// Configure the routes and route resolvers 
app.config(['$routeProvider', 'routes', routeConfigurator]); 
function routeConfigurator($routeProvider, routes) { 

    routes.forEach(function (r) { 
     setRoute(r.url, r.config) 

    }); 

    $routeProvider.otherwise({ redirectTo: '/' }); 

    function setRoute(url, definition) { 
     //set resolvers for all of the routes 
     //by extending any existing resolvers (or creating a new one) 
     definition.resolve = angular.extend(definition.resolve || {}, { 
      prime: prime 
     }); 


     $routeProvider.when(url, definition); 
     return $routeProvider; 
    } 


} 

prime.$inject = ['datacontext']; 

function prime(dc) { 
    dc.prime(); 
} 


// Define the routes 
function getRoutes() { 
    return [ 
     { 
      url: '/', 
      config: { 
       templateUrl: 'app/dashboard/dashboard.html', 
       title: 'dashboard', 
       settings: { 
        nav: 1, 
        content: '<i class="icon-dashboard"></i> Dashboard' 
       } 
      } 
     }, 
     { 
      url: '/sessions', 
      config: { 
       title: 'admin', 
       templateUrl: 'app/sessions/sessions.html', 
       settings: { 
        nav: 2, 
        content: '<i class="icon-calendar"></i> Sessions' 
       } 
      } 
     }, 
     { 
      url: '/speakers', 
      config: { 
       title: 'speakers', 
       templateUrl: 'app/speakers/speakers.html', 
       settings: { 
        nav: 3, 
        content: '<i class="icon-user"></i> Speakers' 
       } 
      } 
     }, 
     { 
      url: '/attendees', 
      config: { 
       title: 'attendees', 
       templateUrl: 'app/attendees/attendees.html', 
       settings: { 
        nav: 4, 
        content: '<i class="icon-group"></i> Attendees' 
       } 
      } 
     } 
    ]; 
} 
})(); 
+4

Вы должны убедиться, что 'prime' возвращает обещание. – gustavohenke

+0

Можете ли вы создать функционирующий jsbin или jsfiddle? – TruongSinh

+0

Вы разобрали это? Вы протестировали решения? – apairet

ответ

0

Я предлагаю вам Переставьте главную функцию для глобального управления определяя его как:

$scope.prime = function (dc) { 
    dc.prime(); 
}; 
1

Попробуйте изменить премьер к следующему:

function prime(dc) { 
    return dc.prime(); 
} 
0

Move первичный внутренний объем маршрутаКонфигуратор

(function() { 
     'use strict'; 

    var app = angular.module('app'); 

    // Collect the routes 
    app.constant('routes', getRoutes()); 

    // Configure the routes and route resolvers 
    app.config(['$routeProvider', 'routes', routeConfigurator]); 

    function routeConfigurator($routeProvider, routes) { 
     routes.forEach(function (r) { 
      setRoute(r.url, r.config); 
     }); 
     $routeProvider.otherwise({ redirectTo: '/' }); 
     function setRoute(url, definition) { 
      definition.resolve = angular.extend(definition.resolve || {}, { prime: prime }); 
      $routeProvider.when(url, definition); 
      return $routeProvider; 
     } 
     prime.$inject = ['datacontext']; 
     function prime(datacontext) { 
      return datacontext.prime(); 
     } 
    } 


    // Define the routes 
    function getRoutes() { 
     return [ 
      { 
       url: '/', 
       config: { 
        templateUrl: 'app/dashboard/dashboard.html', 
        title: 'dashboard', 
        settings: { 
         nav: 1, 
         content: '<i class="fa fa-dashboard"></i> Dashboard' 
        } 
       } 
      }, 
      { 
       url: '/sessions', 
       config: { 
        title: 'sessions', 
        templateUrl: 'app/sessions/sessions.html', 
        settings: { 
         nav: 2, 
         content: '<i class="fa fa-calendar"></i> Sessions' 
        } 
       } 
      }, 
      { 
       url: '/speakers', 
       config: { 
        title: 'speakers', 
        templateUrl: 'app/speakers/speakers.html', 
        settings: { 
         nav: 3, 
         content: '<i class="fa fa-user"></i> Speakers' 
        } 
       } 
      }, 
      { 
       url: '/attendees', 
       config: { 
        title: 'attendees', 
        templateUrl: 'app/attendees/attendees.html', 
        settings: { 
         nav: 4, 
         content: '<i class="fa fa-group"></i> Attendees' 
        } 
       } 
      } 
     ]; 
    } 
})(); 
Смежные вопросы