2014-09-25 65 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是一个非常简单的库,它基本上只能将urls映射到controller/views。如果您想要更大的灵活性,请尝试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 2016-09-12 08:54:57