J'ai deux applications angulaires dans le cadre de mon application. La première application est essentiellement la page de connexion, et la deuxième application est tout le reste. Les deux applications partagent un certain nombre de services, dont un qui contrôle les informations de connexion/logique.Passer d'une application AngularJS à une autre-- le contenu de la page ne se met pas à jour
Le problème se produit lorsqu'un utilisateur utilise la fonctionnalité «se souvenir de moi». Nous souhaitons qu'ils soient automatiquement connectés lorsqu'ils accèdent à la page de connexion et qu'ils soient redirigés vers la page d'état connectée. Le bit connecté automatiquement fonctionne correctement, mais lorsque nous tentons de rediriger l'utilisateur vers la page d'état, qui se trouve dans la deuxième application, il se bloque dans une boucle infinie où la page de connexion est actualisée à plusieurs reprises. (Il est intéressant, si l'utilisateur n'est pas connecté, entre les informations de connexion appropriées et clique sur le
Il semble que la redirection fonctionne, parce que l'URL se met à jour correctement et la page se rafraîchit, mais le contenu est faux (toujours l'ancien contrôleur et vue), donc il continue à refaire la même chose - vérifier pour voir si connecté, rediriger si oui Comment puis-je m'assurer que je transfère réellement à la deuxième application et charge la bonne vue/contrôleur sur un rediriger
code:
twPublicApp.controller('PublicLoginCtrl', function ($scope, $http, LoginData, BrowserStorageService, $window, $location) {
window.changeApiRoot('/api/');
$scope.username = '';
$scope.password = '';
$scope.remember = false;
$scope.errorMessage = '';
$scope.authenticating = false;
if (LoginData.get('SessionToken', null, true) !== null) {
// Check if still has a valid session
$scope.authenticating = true;
LoginData.checkSession(LoginData.get('SessionToken'), LoginData.get('Location'))
.success(function(data) {
if (data.Result === true) {
console.log('User looks to be already logged in... sending on');
BrowserStorageService.changeStore('localStorage');
LoginData.set(data);
//This is the line giving me problems. I've tried these two versions, and a few others, and nothing seems to work properly.
//window.location.href = '/console#/status';
$window.location = '/console#/status';
$scope.authenticating = false;
} else {
$scope.authenticating = false;
LoginData.set({});
}
})
.error(function(jqXHR, textStatus, errorThrown) {
$scope.authenticating = false;
LoginData.set({});
});
}
$scope.authenticate = function() {
$scope.authenticating = true;
LoginData.authenticate($scope.username, $scope.password, $scope.remember)
.success(function(data) {
if (data.Result === true) {
if ($scope.remember) {
BrowserStorageService.changeStore('localStorage');
} else {
BrowserStorageService.changeStore('sessionStorage');
}
LoginData.set(data);
//Interestingly, this line works perfectly.
window.location.href = '/console#/status';
return;
}
$scope.authenticating = false;
})
.error(function(jqXHR, textStatus, errorThrown) {
$scope.authenticating = false;
});
};
});
Définissez les états de vos URL à l'aide du routage et utilisez $ location.path ("yourUrlName") de angular pour accéder à la page d'état. Cela garantira que les valeurs du contrôleur seront mises à jour dans la vue. – Vivz
@Vivz J'ai essayé ça.Le problème est que je veux passer à une deuxième application angulaire, pas dans le même, donc l'utilisation des états ne fonctionne pas. – senschen
Pouvez-vous essayer d'utiliser ['$ location.path (url)'] (https://docs.angularjs.org/api/ng/service/$location#path) à la place pour définir l'URL? Aussi, il est difficile de comprendre le problème sans voir le reste du code (un exemple de plunker serait bien), mais vous pouvez déboguer pour voir si cela n'est pas dû à un appel à [$ browser.onUrlChange()] (https : //github.com/angular/angular.js/blob/15581287a4ec003680d158b303af07f5f16ffbf0/src/ng/location.js#L941) lorsque l'URL change. –