回答の下にあるコメントを必ずお読みください。この質問に答えたとき、単体テストと設計については考えていませんでした。目的の結果を達成するための多くの方法のうちの 1 つになり得ることを実証しただけです。
コントローラーまたはあなたの下でそれを行う最良の方法だと思いますapp.config.run
。あなたの場合、ユーザーのログインステータスをチェックする別のモジュールを作成する必要があります。アプリ モジュールにユーザー ログイン ステータス チェック モジュールを挿入します。
サンプルへのリンクとそれに続くapp.js
コードを次に示します。
http://plnkr.co/edit/dCdCEgLjLeGf82o1MttS
var login = angular.module('myLoginCheck', [])
.factory('$logincheck', function () {
return function (userid) {
// Perform logical user logging. Check either
// by looking at cookies or make a call to server.
if (userid > 0) return true;
return false;
};
});
var app = angular.module('myApp', ['myLoginCheck']);
app.config(function ($routeProvider, $locationProvider) {
$routeProvider
.when('/publicurl', {})
.when('/loginurl', {})
.when('/unauthorize', {})
.otherwise({redirectTo: '/'});
})
.run(function ($logincheck, $location) {
//console.log("Into run mode");
console.log("Userid 5 is logged in: ", $logincheck(5));
console.log("Userid 0 logged in: ", $logincheck(0));
//now redirect to appropriate path based on login status
if ($logincheck(0)) {
//$location.path('/loginurl'); or
}
else {
//$location.path('/publicurl'); or
}
});
app.controller('MainCtrl', function ($scope) {
$scope.name = 'World';
});