首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Angular中,如何使用$location.path作为$http.post成功回调进行重定向

在Angular中,如何使用$location.path作为$http.post成功回调进行重定向
EN

Stack Overflow用户
提问于 2013-01-13 15:26:57
回答 5查看 201.4K关注 0票数 72

我试图通过发送一个php文件的帖子来实现一个简单的认证服务,我需要它在我的ng-view上加载部分主页当它成功的时候。

这是我尝试过的:

代码语言:javascript
复制
function loginCtrl($scope, $http, $location){
    $http.post(url,data).success(function(data){
        $location.path('/home');
    });
}

导致我的url更改,但ng-view不更新。它会在我手动刷新页面时更新。

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

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

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

任何关于学习资料的见解或指点都会很棒。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-18 04:42:01

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

代码语言:javascript
复制
//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();
  }
};
票数 83
EN

Stack Overflow用户

发布于 2013-05-27 17:49:39

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

代码语言:javascript
复制
    $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.');      
    });

这对我很管用。

票数 3
EN

Stack Overflow用户

发布于 2016-03-24 21:52:10

我没有使用success,而是将其更改为then,它就可以工作了。

代码如下:

代码语言:javascript
复制
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';
            }
        });
    };
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14301524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档