2014-09-25 2 views
0

Использование Angular У меня есть примерно дюжина маршрутов, аналогичная приведенному ниже примеру кода.

Есть ли способ переопределить, какой шаблон и контроллер загружен на основе некоторых других критериев, сохраняя при этом URL-адрес? Моя цель - отобразить страницу входа, когда ... скажем $ scope.isLoggedIn = false. Я не хочу изменять URL-адрес/login.

SomeApp.config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
    when('/place', { 
     templateUrl: 'routes/place.html', 
     controller: 'PlaceCtrl' 
    }) 
    .when('/test', { 
     templateUrl: 'routes/test.html', 
     controller: 'TestCtrl' 
    }); 
}]); 

ответ

1

ngRoute - очень простая библиотека, которая в основном может отображать только URL-адреса контроллеров/просмотров. Если вы хотите больше гибкости, попробуйте ui-router, который имеет возможность маршрутизации на основе состояния.

1

Это не реально работает с ngRoute, но с помощью ui-router вы можете динамически предоставлять разные шаблоны, основанные на любом желаемом.

$stateProvider.state('root', 
    url: '/' 
    controller: 'HomePageController' 
    templateProvider: [ 
    '$rootScope' 
    '$templateCache' 
    '$http' 
    ($rootScope, $templateCache, $http) -> 
     templateId = if $rootScope.isLoggedIn then "home-page-logged-in" else "home-page-not-logged-in" 
     templateId = "/templates/#{templateId}.html" 

     return $http.get(templateId, cache: $templateCache) 

    ] 
) 

Уловка, насколько я знаю, вы не можете изменить контроллер, только шаблон. Какой вид воняет.

+0

Вы всегда можете поместить контроллер в шаблон, используя атрибут ng-controller, и просто исключите его из маршрутизации. :) – Stuart

Смежные вопросы