2 つの異なるテンプレートを使用しようとしています。1 つはログアウトしたユーザーがビジネスについて説明するランディング ページで、もう 1 つはユーザーがログインしている場合のダッシュボード ページです。
UIルーターでこれを行う方法について、この他のスタックを読みました。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'
Main.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 を追加しました。