我试图有两个不同的模板。一个是用于描述业务的已注销用户的登录页面,另一个是用于用户登录的仪表板页面。
我在其他堆栈上阅读了如何使用 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>
主控制器.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,以便每个模板都有其单独的控制器。