我想要两个不同的模板。一个是为未登录用户描述业务的登录页,另一个是为已登录用户显示仪表板页面。
我在这个 Stack Overflow 页面上看到了如何使用 UI-router 实现此目的的方法。我想知道如何使用 ngRoute 来做类似的事情的最佳实践?
下面的设置是这样的,"/frontdesk" 是仪表板,"/" 是登出用户的登录页。但是!无论用户是否在仪表板上或已退出登录并发送到登录页,我都希望 URL 保持不变!我不想要 "/frontdesk",我想要 IndexController 和 FrontdeskController 的 "/"。
以下是我的路由 JS。
(function () {
'use strict';
angular
.module('resonanceinn.routes')
.config(config);
config.$inject = ['$routeProvider'];
function config($routeProvider) {
$routeProvider
.when('/', { // This is the landing Page
controller: 'IndexController',
controllerAs: 'vm',
templateUrl: '/static/javascripts/layout/index.html'
})
.when('/frontdesk', { //This is logged in user that I want to become '/' as well
controller: 'FrontdeskController',
controllerAs: 'vm',
templateUrl: '/static/javascripts/frontdesk/frontdesk.html'
})
.when('/register', {
controller: 'RegisterController',
controllerAs: 'vm',
templateUrl: '/static/javascripts/authentication/register.html'
})
.when('/login', {
controller: 'LoginController',
controllerAs: 'vm',
templateUrl: '/static/javascripts/authentication/login.html '
})
.when('/:username', {
controller: 'ProfileController',
controllerAs: 'vm',
templateUrl: '/static/javascripts/profiles/profile.html'
})
.when('/:username/settings', {
controller: 'ProfileSettingsController',
controllerAs: 'vm',
templateUrl: '/static/javascripts/profiles/settings.html'
}).otherwise('/');
}
})();
解决方案!
感谢大家的回答。
特别感谢 @ThibaudL 提供更好的解决方案。
这是我最终采用的方法:
在 Routes.js 中
.when('/', {
controller: 'MainController',
controllerAs: 'vm',
templateUrl: '/static/javascripts/layout/Main.html'
主页.html
<div ng-include="" src="'/static/javascripts/layout/index.html'" ng-if="auth"></div>
<div ng-include="" src="'/static/javascripts/frontdesk/frontdesk.html'" ng-if="!auth"></div>
主控制器 MainController.js
(function () {
'use strict';
angular
.module('resonanceinn.layout.controllers')
.controller('StartController', StartController);
StartController.$inject = ['$scope', '$route', '$routeParams', '$location', 'Authentication'];
function StartController($scope, $route, $routeParams, $location, Authentication) {
$scope.auth = Authentication.isAuthenticated();
}
})();
现在,如果用户已通过身份验证,则会将模板切换到用户的仪表板。我为每个模板添加了一个带有ng-controller的新div,以便每个模板都有它们自己独立的控制器。