在 Angular 中,如何使用 $location.path 重定向为 $http.post Success 回调

我试图做一个简单的认证服务,通过发送一篇文章到一个 php 文件,我需要它来加载我的 ng-view上的主页部分时,它的成功。

这就是我试过的:

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

导致我的网址改变,但 ng-view没有更新。它更新时,我手动刷新页面。

(路由已经在 $routeProvider上正确配置,我已经测试了用一个独立的函数重定向,而不是作为回调,它工作)

我还尝试将 $location.path('/home')定义为一个函数,然后在回调时调用它,但它仍然不能工作。

我做了一些研究,发现一些文章说,这发生在使用另一个第三方插件,我只加载 angular.js

对一些学习材料的任何见解或指示都将是伟大的

201610 次浏览

下面是本文 http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#apply-digest-and-phase中的 changeLocation 示例

//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();
}
};

我正在做以下页面重定向(从登录到主页)。我必须将用户对象也传递到主页。所以,我使用 Windows 本地存储。

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

这对我很管用。

官方指南给出了一个简单的答案:

有什么不行的?

当浏览器 URL 更改时,它不会导致整页重新加载。 要在更改 URL 后重新加载页面,请使用低级 API, $windows. location. href.

资料来源: https://docs.angularjs.org/guide/$location

我没有使用 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';
}
});
};
});

使用: $window.location.href =’/Home.html’;

这是非常容易的代码. . 但很难罚款. 。

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


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