Подтвердить что ты не робот

В Angular, как перенаправить с $location.path как обратный вызов успеха http.post

Я пытаюсь сделать простую службу проверки подлинности, отправив сообщение в php файл, мне нужно, чтобы он загрузил частичную страницу на моей странице ng-view, когда она была успешной.

Это то, что я пробовал:

function loginCtrl($scope, $http, $location){
    $http.post(url,data).success(function(data){
        $location.path('/home');
    });
}

Результаты изменения моего URL, но ng-view не обновляются. Он обновляется, когда я вручную обновляю страницу.

(маршруты были правильно настроены на $routeProvider, я тестировал перенаправление этого с помощью автономной функции не как обратный вызов, и он работает)

Я также попытался определить $location.path('/home') как функцию, а затем называть его обратным вызовом, он все еще не работает.

Я провел некоторое исследование и нашел несколько статей, в которых говорится, что это происходит при использовании другого стороннего плагина, я загружаю только angular.js

Любые идеи или указатели на некоторые учебные материалы будут отличными

4b9b3361

Ответ 1

Вот пример changeLocation из этой статьи 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();
  }
};

Ответ 2

В официальном руководстве есть простой ответ:

Что он не делает?

Это не приводит к полной перезагрузке страницы при изменении URL-адреса браузера. Чтобы перезагрузить страницу после изменения URL-адреса, используйте API нижнего уровня, $Window.location.href.

Источник: https://docs.angularjs.org/guide/$location

Ответ 3

Я делаю ниже для перенаправления страницы (от входа на домашнюю страницу). Я должен передать объект пользователя также на домашнюю страницу. поэтому я использую 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.');      
    });

И это сработало для меня.

Ответ 4

Вместо использования success я меняю его на then, и он работает.

вот код:

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';
            }
        });
    };
});

Ответ 5

Использование: $window.location.href= '/Home.html';

Ответ 6

это очень простой код.. но трудно оштрафовать..

detailsApp.controller("SchoolCtrl", function ($scope, $location) { 
      $scope.addSchool = function () {

        location.href='/ManageSchool/TeacherProfile?ID=' + $scope.TeacherID;
      }
});