使用角度设置标题和页面重定向

Posted

技术标签:

【中文标题】使用角度设置标题和页面重定向【英文标题】:Setting headers and page redirection using angular 【发布时间】:2014-04-29 22:08:26 【问题描述】:

我正在开发一个登录应用程序,其中我与 REST 接口进行角度通信以验证用户身份。我正在使用 $http 来完成这项任务。现在,我需要将我的页面重定向到另一个 URL(这可能在相同或不同的域上)。另外,我需要在此过程中设置标题。

请帮助我实施以继续执行此任务。

【问题讨论】:

【参考方案1】:

1) AngularJs 旨在构建 SPA,您不应重定向到另一个 url。您应该重定向到当前页面中的另一个路径。如果您使用angular router,您将重定向到另一个状态。看看这个以获取更多信息:single page application deep linking with login page

2) 因为浏览器会自动处理 302 响应并强制您的 ajax 函数向 Location 发送另一个 ajax 请求以检索状态为 200 的最终结果。您的服务器应该返回 401 当用户没有被授权时。 Cannot handle 302 redirect in ajax and why?

客户端处理 401 状态码的示例代码(未授权):

$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) 
    if (error.status == 401)  // check for 401 status code
        $state.transitionTo("login",  returnUrl: $location.url() );
    
)

另一个带有 $http 的示例代码,我建议在 interceptors 中全局执行它

$httpProvider.interceptors.push(function($q, $location) 
    return 
      'responseError': function(response) 
         if(response.status === 404)
             $location.path('your redirection path');
         
         return $q.reject(response);
      
    ;
  );

3) 为了设置您的请求标头,您可以在 $httpProvider.defaults.headers 或 per request 中全局设置它

【讨论】:

Hello Khanh TO,在我的情况下,我需要在用户成功登录后重定向到另一个域。目前我的代码如下所示: $scope.createUser = function() $http( method: 'POST', url: '/ang/rest/login/authenticate', headers: 'Content-Type': ' application/json', data: $scope.user ).success(function ($location,$http) $http( method:'GET', url:'google.com', headers:'Authorization' : '基本 dGVzdDp0ZXN0' ) @Jaspreet:如果你需要重定向到其他域,处理401并使用window.location.href,关键是你在使用ajax时必须处理401而不是302。要在同一页面中重定向,只需使用 $state 或 $location【参考方案2】:

如果您需要转到另一个页面,请使用直接 java 脚本

window.location.href=......

【讨论】:

我也需要设置标题,如果我按照这种方法,我无法设置标题 这并没有回答关于标题的问题。【参考方案3】:

您是否考虑过阅读 Angular documentation / API?

使用$location 服务进行重定向并阅读 $http 文档以了解如何设置标头。

引用:

$http 服务会自动为所有请求添加特定的 HTTP 标头。这些默认值可以通过访问 $httpProvider.defaults.headers 配置对象来完全配置 [...]

SO 社区中的任何人都不太可能为您的问题提供完整的指南,因为所需的信息很容易获得。

【讨论】:

但是,如果您需要重定向到另一个服务器中带有某些特定标头的另一个页面怎么办?我知道您可以将标头添加到 $http 请求中,但是如何在重定向 $location 中做到这一点? @Coyolero 我想说这超出了 Angular 的目的。 $location 服务用于解析 URL 并使其可用于您的应用程序。可以(并且应该在 IMO)不依赖 Angular 的情况下重定向到具有特定标头的另一台服务器。不过,这只是我个人的看法。

以上是关于使用角度设置标题和页面重定向的主要内容,如果未能解决你的问题,请参考以下文章

将发送页面作为数据快速重定向到角度 $http 的成功,而不是重定向到页面 [重复]

无法使用角度js重定向到另一个页面

在快速服务器上成功调用 api 后重定向具有角度路由的页面

使用 Passport 进行社交身份验证登录后如何重定向到个人资料页面? (角度,快递,护照,jwt)

在角度 UI 路由器中单击时重定向到相应的单个产品页面

我如何使用角度路由重定向用户