MEAN.ioのボイラープレートスタックを使用していて、それが非常に良い出発点であることがわかりましたが、さまざまなルーティングコマンドを混在させるのに問題があります。私のアプリには公開されているシンプルなサインインページがあり、他のすべてはその背後に隠されています。ユーザーが問題なく認証されているかどうかを確認できますが、サーバーからサインインページをロードするためにAngularを取得することはできません。HTMLページにすでにサインインボタンがあります。正しいルートを呼び出してもまったく問題ありません。コードから同じことを行うことはできません。
$ location.path( '/ signin');パスにハッシュが残っているため、コードはサーバーを呼び出しません
私のAngularコントローラー
angular.module('tms.tweets').controller('TweetsController', ['$scope', '$routeParams',
'$location', '$resource', 'Global', 'Tweets', function ($scope, $routeParams, $location,
$resource, Global, Tweets) {
$scope.global = Global;
$scope.find = function() {
if(Global.authenticated){
console.log(Global.authenticated);
Tweets.query(function(tweets) {
console.log("Tweets at Angular Controller: " + tweets.length);
$scope.tweets = tweets;
});
}
else{
console.log("Unauthorized");
$location.path('/signin');
}
};
}]);
リダイレクトの問題に対する答えが見つかりました。$ location.pathを次のように交換しました。
$window.location.href = '/signin';
私の目的のために$window.location.href = '/newpath';
コントローラーの内部からは機能していませんでした。
コントローラ内でリロードする必要がある場合は、次の関数を使用しています。
$scope.changeRoute = function(url, forceReload) {
$scope = $scope || angular.element(document).scope();
if(forceReload || $scope.$$phase) { // that's right TWO dollar signs: $$phase
window.location = url;
} else {
$location.path(url);
$scope.$apply();
}
};
次に、次のように呼びます。
$scope.changeRoute('#/newpath');
ただし、これを行うことは避け、アプリの構成フェーズに実行フェーズを追加することをお勧めします。アプリ構成に実行フェーズを追加する方法について詳しくは、こちらをご覧ください: http://www.angularjshub.com/examples/modules/configurationrunphases/