如何在角度拦截器中执行重定向?

2024-04-27

我对 Angular 很陌生,我有一个关于在拦截器中处理重定向的最佳方法的问题。

我的应用程序中有某些页面,只有在选择了帐户后才能访问。因此,如果未选择帐户,我希望用户通过页面路由来选择帐户。

以下是我失败的尝试:

    // within config

    $httpProvider.interceptors.push(function($q, $injector){
        return {
            'request': function(config) {
                var state = $injector.get('$state');

                if(state.is('user.list')) {
                    var accountService = $injector.get('AccountService');
                    if(!accountService.accountSelected()){
                        
                        // cancel the current request
                        var defer = $q.defer();
                        defer.resolve();
                        config.timeout = defer.promise;

                        state.go('account.select');

                    }
                }

                return config;
            }
        }
    });

这导致了无限循环为我。由于某种原因,当state.go触发——并且它被重新拦截,状态仍然是“user.list”

注意:我使用的是 ui-router,角度 1.2.6

另一个注意事项:我想把它放在一个 state.resolve 块中的另一个地方。


像这样做

$injector.get('$state').transitionTo('public.login');

完整代码如下

var interceptor = ['$location', '$q', '$injector', function($location, $q, $injector) {
    function success(response) {
        return response;
    }

    function error(response) {

        if(response.status === 401) {
            $injector.get('$state').transitionTo('public.login');
            return $q.reject(response);
        }
        else {
            return $q.reject(response);
        }
    }

    return function(promise) {
        return promise.then(success, error);
    }
}];

$httpProvider.responseInterceptors.push(interceptor);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在角度拦截器中执行重定向? 的相关文章

随机推荐

  • 在 SQL 中查找日期范围重叠的记录

    我有以下表格和数据 CREATE TABLE customer wer id customer NUMBER name VARCHAR2 10 surname VARCHAR2 20 date from DATE date to DATE
  • 验证 PDF 文档中的数字签名

    我正在尝试验证 PDF 数字签名 我知道 当 PDF 被签名时 会定义一个字节范围 嵌入证书 并且根据我的阅读 签名的消息摘要和时间戳也存储在 PDF 中 我已经可以提取证书并验证它们 现在我正在尝试验证 pdf 的完整性 但我的问题是我不
  • 从该共享库中查找加载的共享库的位置?

    从共享库中的函数 在正在运行的进程 用 C 编写 内 我如何发现该共享库是从哪里加载的 我找到的所有答案都涉及使用诸如ldd在命令行中 或者通过查看 proc self maps 在 Win32 上 我只需使用GetModuleFileNa
  • useSelector 解构与多次调用

    最近我在阅读react redux 文档https react redux js org next api hooks https react redux js org next api hooks还有一个与平等比较和更新相关的部分 其中写
  • 设置 C# 可选参数的默认值

    每当我尝试将可选参数的默认值设置为资源文件中的某些内容时 我都会收到以下编译时错误 message 的默认参数值必须是编译时常量 有什么方法可以改变资源文件的工作方式来实现这一点吗 public void ValidationError s
  • 用于更改可为空和非空数据类型的数据注释是什么?

    我认为这对于有经验的程序员来说应该很简单 但事实就是如此 我正在开发一个首先使用实体 框架代码的项目 我还启用了迁移并设置为自动 可爱的功能 我愚蠢地在我的实体类中声明了一种错误的数据类型 现在我意识到它不适用于我想要做的事情 一定是自动完
  • 导出“函数”类对象的 S3 方法

    函数对象似乎与 S3 方法的调度配合得很好 但由于某种原因 它们无法导出到 NAMESPACE 文件中 下面的代码适用于调度到 function method as abc function x UseMethod as abc as ab
  • 错误:“会员中心没有注册任何设备”- UDID 无效?

    我收到错误 找不到匹配的配置文件 针对您的 UDID 所选团队没有 iOS 开发者计划成员资格 是的 它有 它处于活动状态 和 无法创建配置文件 因为您的团队没有在会员中心注册设备 请连接设备并启用开发 然后将其添加到会员中心 我已经在会员
  • 正确设置 DataGridCell 样式

    这是我之前的问题之后的一个问题 你可以在那里找到它 https stackoverflow com questions 7092145 styling a textblock autogenerated in a contentpresen
  • 如何在ubuntu服务器上安装android SDK

    我在 ubuntu 服务器中有一个 React Native 项目 我想构建一个用于生产的 Android 应用程序 为此 我首先必须生成 Gradle Wrapper 文件 因此我在中运行此命令android目录 gradle wrapp
  • 使用正则表达式解析HLS m3u8文件

    我想解析 HLS master m3u8 文件并从中获取带宽 分辨率和文件名 目前我正在使用字符串解析来搜索字符串中的某些模式并执行子字符串来获取值 示例文件 EXTM3U EXT X STREAM INF PROGRAM ID 1 BAN
  • 功能段落

    抱歉 我还不太明白 FP 我想将一系列行分割成一系列行序列 假设一个空行作为段落划分 我可以在 python 中这样做 如下所示 def get paraghraps lines paragraphs paragraph for line
  • 使用每个实体包含许多图像的核心数据?

    我是 Core Data 的新手 正在开发我的第一个个人 iOS 应用程序 我有一个实体 我们称之为Car 其中有一个缩略图以及与其关联的其他图像库 数据使用同步到在线服务ASIHTTPRequest and JSONKit 该应用程序不需
  • 从逗号分隔的字符串创建 html 表 javascript

    我正在尝试编写一个 Javascript 函数 该函数将文本写入 最终 创建以下 html 表 我将向它传递不同长度的参数以创建数百个表 table tr td u School u td td u Percent u td tr td S
  • mysql 部分索引、反向索引

    我有一张包含单词列表的表格 字 VARCHAR 16 我需要创建一个反向索引 IE 单词 apple 将索引为 elppa 单词 banana 将索引为 ananab 依此类推 另外 是否可以索引单词的一部分 例如 跳过第一个 最后一个或
  • Android < 4.3 WebView https 错误:回退到 SSLv3,因为主机不容忍 TLS

    我的应用程序包含一个WebView加载 httpsurl 我注意到 Android 版本 gt 4 3一切正常 但在较低版本上我收到此错误 external chromium net http http stream factory imp
  • 英国日期正则表达式[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个验证英国日期格式的正则表达式 我有以下内容 0 1 9 12 0 9 3 01 0 1 9 1 012 19 20 d d 这对于验证非常有用 09 12 2011 但如果日期是 9 12 20
  • 选择另一个表连接的每行的最小值

    我有下表 Table1 Table2 CardNo ID Record Date ID Name Dept 1 101 8 00 11 7 2013 101 Danny Green 2 101 13 00 11 7 2013 102 Tan
  • iOS 的云存储选项

    我正在尝试创建一个后端 让许多用户可以在我正在创建的 iPhone 应用程序中相互通信 我尝试过使用 Core Data Google App Engine Google Cloud Storage 和 Amazon Web Service
  • 如何在角度拦截器中执行重定向?

    我对 Angular 很陌生 我有一个关于在拦截器中处理重定向的最佳方法的问题 我的应用程序中有某些页面 只有在选择了帐户后才能访问 因此 如果未选择帐户 我希望用户通过页面路由来选择帐户 以下是我失败的尝试 within config h