Je tente de faire un service d'authentification simple en envoyant une publication à un fichier php, j'ai besoin de lui pour charger la page d'accueil partielle sur mon ng-view
lorsque sa réussite.
C'est ce que j'ai essayé:
function loginCtrl($scope, $http, $location){
$http.post(url,data).success(function(data){
$location.path('/home');
});
}
Les résultats de mon url changent mais ng-view
ne se met pas à jour. Il met à jour lorsque j'actualise manuellement la page.
(les routes ont été configurées correctement au $routeProvider
, j'ai testé la redirection avec une fonction autonome et non comme un rappel et cela fonctionne)
J'ai également essayé de définir la fonction $location.path('/home')
en tant que fonction, puis de l'appeler lors du rappel, cela ne fonctionne toujours pas.
J'ai fait des recherches et trouvé des articles indiquant que cela se produisait lors de l'utilisation d'un autre plugin tiers, je ne charge que angular.js
Toute idée ou indication sur du matériel d'étude sera formidable
Voici l'exemple changeLocation de cet article http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#apply-digest-and-phase
//be sure to inject $scope and $location
var changeLocation = function(url, forceReload) {
$scope = $scope || angular.element(document).scope();
if(forceReload || $scope.$$phase) {
window.location = url;
}
else {
//only use this if you want to replace the history stack
//$location.path(url).replace();
//this this if you want to change the URL and add it to the history stack
$location.path(url);
$scope.$apply();
}
};
Il y a une réponse simple dans le guide officiel:
Que ne fait-il pas?
Cela ne provoque pas un rechargement complet de la page lorsque l'URL du navigateur est modifiée . Pour recharger la page après avoir modifié l'URL, utilisez l'API de niveau inférieur, $ window.location.href.
Je fais ce qui suit pour la redirection de page (de la connexion à la page d'accueil). Je dois également transmettre l'objet utilisateur à la page d'accueil. Donc, j'utilise Windows LocalStorage.
$http({
url:'/login/user',
method : 'POST',
headers: {
'Content-Type': 'application/json'
},
data: userData
}).success(function(loginDetails){
$scope.updLoginDetails = loginDetails;
if($scope.updLoginDetails.successful == true)
{
loginDetails.custId = $scope.updLoginDetails.customerDetails.cust_ID;
loginDetails.userName = $scope.updLoginDetails.customerDetails.cust_NM;
window.localStorage.setItem("loginDetails", JSON.stringify(loginDetails));
$window.location='/login/homepage';
}
else
alert('No access available.');
}).error(function(err,status){
alert('No access available.');
});
Et cela a fonctionné pour moi.
Au lieu d'utiliser success
, je le change en then
et cela fonctionne.
voici le code:
lgrg.controller('login', function($scope, $window, $http) {
$scope.loginUser = {};
$scope.submitForm = function() {
$scope.errorInfo = null
$http({
method : 'POST',
url : '/login',
headers : {'Content-Type': 'application/json'}
data: $scope.loginUser
}).then(function(data) {
if (!data.status) {
$scope.errorInfo = data.info
} else {
//page jump
$window.location.href = '/admin';
}
});
};
});
Utilisez: $ window.location.href = '/Home.html';
c'est un code très facile .. mais difficile à trouver ..
detailsApp.controller("SchoolCtrl", function ($scope, $location) {
$scope.addSchool = function () {
location.href='/ManageSchool/TeacherProfile?ID=' + $scope.TeacherID;
}
});