覆盖AngularJS路由以显示基于$ scope变量的模板

时间:2014-09-25 05:44:04

标签: angularjs ngroute

使用Angular我有十几个类似于以下示例代码的路径设置。

是否有办法覆盖哪些模板和控制器根据其他一些标准加载,同时保持URL的顺畅?我的目标是在...时显示一个登录页面,让我们说$ scope.isLoggedIn = false。我不想将网址更改为/ login。

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

2 个答案:

答案 0 :(得分:1)

ngRoute是一个非常简单的库,基本上只能将URL映射到控制器/视图。如果您想要更大的灵活性,请尝试ui-router,它能够根据状态进行路由。

答案 1 :(得分: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)

  ]
)

据我所知,你不能更改控制器,只能更改模板。哪种有点臭。