如何设置加载模板url的条件

时间:2014-12-22 10:36:27

标签: angularjs ngroute

我想有两个主页(已登录,已注销),其中包含' /'等网址。

用ngRoute做它是否可行? 我正在寻找解决方案,但到处都是使用ui-router。

现在我有点像:

$rootScope.$on('$routeChangeStart', function (event, next) {
  if ( next.$$route.orginalPath == '/' && loggedIn ) {
     next.$$route.templateUrl = "app/main/main-loggedIn.html"
  } else {
     next.$$route.templateUrl = "app/main/main-loggedOut.html"
  }
});

angular.module('name').config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'app/main/main-loggedOut.html',
        controller: 'MainCtrl'
      })
  });

但它不能很好地运作。它更改了templateURL,但它在变换之前获取数据并加载了始终登录的页面。

我还有解决办法将两个html放在一个文件中设置ng-if,但我更愿意避免它。

溶液

main.html中

<div ng-include="mainTemplate"></div>

main.js

angular.module('bookkeepingApp').config(function ($routeProvider) {
   $routeProvider.when('/', { controller: 'MainCtrl', templateUrl: "app/main/main.html" })
}).controller('MainCtrl', function ($scope, Auth) {
   $scope.$watch(function($scope) {
      return $scope.mainTemplate = Auth.isLoggedIn() ? 'app/main/main-loggedIn.html' : 'app/main/main-loggedOut.html';
   })
});

2 个答案:

答案 0 :(得分:1)

我不知道你是如何获得loggedIn值的,但templateUrl接受一个函数作为值,你只需根据信息返回正确的值用户。我想上面的代码可能有用。

angular.module('name').config(function ($routeProvider) {
  $routeProvider
    .when('/', {
      controller: 'MainCtrl',
      templateUrl: function() {
        return loggedIn ? "app/main/main-loggedIn.html" : "app/main/main-loggedOut.html"
      }
   })
 });

答案 1 :(得分:0)

您可以在模板中放置一个模板,即您的路径“/”中有

<div ng-include="scopeVariable">

</div>

范围变量指向登录/登出页面,具体取决于您的需求。