如何修复“超出最大调用堆栈大小”AngularJS

2024-03-20

我正在使用 AngularJs 和 Ui-Router,我试图设置两个不同的主页,一个用于已登录的用户,另一个用于未登录的用户。但我收到以下错误:

RangeError: Maximum call stack size exceeded

I ran console.trace()我可以看到存在一个问题导致状态无限循环(或类似的情况)。但我不知道如何解决它。

这是生成错误的代码。

.run(function ($rootScope, $state, $location, Auth) {
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState) {
      if(fromState.name === "") {
        if (Auth.isLoggedIn()) {
            $state.go('main');
            event.preventDefault();
        } else {
          $state.go('welcome');
          event.preventDefault();
        }
      } else {
         if (toState.authenticate && !Auth.isLoggedIn()) {
             $location.path('/login');
             event.preventDefault();
         }
      }
    });

据我所知,这似乎源于if(fromState.name === "")


我已经创建了一个例子 http://plnkr.co/edit/3kImqU?p=preview,使用默认页面和 auth/unauth 用户。可以看到类似的问题here https://stackoverflow.com/a/24725180/1679310

首先,这将是听众:

app.run(function ($rootScope, $state, $location, Auth) {

    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState) {

      var shouldLogin = toState.data !== undefined
                    && toState.data.requireLogin 
                    && !Auth.isLoggedIn ;

      // NOT authenticated - wants any private stuff
      if(shouldLogin)
      {
        $state.go('login');
        event.preventDefault();
        return;
      }


      // authenticated (previously) comming not to root main
      if(Auth.isLoggedIn) 
      {
        var shouldGoToMain = fromState.name === ""
                          && toState.name !== "main" ;

        if (shouldGoToMain)
        {
            $state.go('main');
            event.preventDefault();
        } 
        return;
      }

      // UNauthenticated (previously) comming not to root public 
      var shouldGoToPublic = fromState.name === ""
                        && toState.name !== "public"
                        && toState.name !== "login" ;

      if(shouldGoToPublic)
      {
          $state.go('public');console.log('p')
          event.preventDefault();
      } 

      // unmanaged
    });
});

怎么了?

  • 我们检查用户是否登录。如果没有,但需要访问非公开内容...我们重定向到登录
  • 用户已登录,但没有直接进入主页面...我们将他转移
  • 用户未登录,但不会公开...我们重定向
  • 否则……就这样吧

以下是状态:

  $stateProvider
    // available for anybody
    .state('public',{
        url : '/public',
        template : '<div>public</div>',
    })
    // just for authenticated
    .state('main',{
        url : '/main',
        template : '<div>main for authenticated</div>',
        data : {requireLogin : true },
    })
    // just for authenticated
    .state('other',{
        url : '/other',
        template : '<div>other for authenticated</div>',
        data : {requireLogin : true },
    })
    // the log-on screen
    .state('login',{
        url : '/login',
        templateUrl : 'tpl.login.html',
        controller : 'LoginCtrl',
    })

Check 笨蛋在这里 http://plnkr.co/edit/3kImqU?p=preview or here https://stackoverflow.com/a/24725180/1679310

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

如何修复“超出最大调用堆栈大小”AngularJS 的相关文章

随机推荐

  • 使用NotificationListenerService检查对通知的访问

    我正在使用 gt 4 3NotificationListenerService访问通知 第一次启动时 我的应用程序会将用户带到 访问通知 系统面板 但只要禁用 访问通知 中我的应用程序的复选框 我就想将用户带到那里 我还没有找到isNoti
  • 将带有变量的文本文件导入python

    我的目标 我创建的程序的目的是让用户输入元素的名称 然后 python 读入一个外部文件 找到所请求元素分配的值 最后将该值打印出来 例如 gt gt gt helium 2 问题是我不知道如何让 python 解释如下所示的文本文件 hy
  • 如何生成Maven项目所有模块之间的依赖关系图?

    如何生成 Maven 项目的所有模块之间的依赖关系图 不包括 JUnit SLF4J 等第三方库 我找不到一种使用 m2eclipse 将所有模块包含到一个图中的方法 谢谢 If the 依赖图m2eclipse 的功能不能满足您的需求 也
  • mysql 用以前的值生成缺失的日期

    下面是一个具有稀疏日期的 mysql 表 col dt id value A1 2018 05 28 30 A1 2018 05 30 20 A1 2018 05 31 50 A1 2018 06 01 50 A1 2018 06 04 8
  • 将 .NET Standard 2.1 与 UWP 结合使用

    我今天犯了一个大错误 更新了一些 NuGet 库 它迫使我要么回滚一周的工作量 要么升级到 ASP NET Core 3 0 我讨厌使用非生产的东西 但我也不想理清这些库 所以我升级了 然后它迫使我重新定位 NET Standard 2 1
  • 如何使用 PDFBOX 检查完全嵌入和子集嵌入字体

    您好 我想使用 PDFBOX 检查 PDF 中字体的完全嵌入和子集嵌入 我尝试使用以下逻辑来检查 private boolean IsEmbedded Map
  • 如何更改 Bean Validation 中 ValidationMessages.properties 的位置

    默认情况下 ValidationMessages properties 可以位于我的类路径的根目录中 我可以更改此文件的位置 例如 com myapp Anything properties 吗 来自 JSR 303 规范 4 3 1 1
  • 如何实现方法链?

    在 C 中 如何实现在自定义类中链接方法的能力 以便可以编写如下内容 myclass DoSomething DosomethingElse x etc Thanks 链接是从现有实例生成新实例的一个很好的解决方案 public class
  • Django-tastypie:有关于 POST 中文件上传的示例吗?

    谁能给出一个关于使用 tastypie FileField 的完整示例 包括服务器端和客户端吗 这是我尝试过的 models py class Foo models Model img models ImageField upload to
  • VBA 从 OneDrive 下载文件

    我正在尝试从 OneDrive 下载文件 我是 API 概念的新手 这里是代码 Sub OneDrive Download Declare the Object Dim oRequest As Object Create and Assig
  • 从 Function 应用访问虚拟网络中的 Cosmos DB

    对这么长的帖子表示歉意 但我已经在这个问题上工作了几天 但似乎找不到解决方案 情况 我想通过将 Azure 中的 Cosmos DB 放置在虚拟网络 VNet 中来限制对它的访问 并且只允许通过 Function 应用进行访问 Approa
  • fipy 中的 Gmsh 网格并行执行

    我正在尝试解决 gmsh 网格上的并行问题 加载 geo 文件时发生错误 raise EnvironmentError Gmsh version must be gt 2 0 我安装的gmsh版本是2 8 3 我也尝试过2 13 2 10
  • 当用户想要应用程序中的另一种颜色时如何更改颜色? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 嗨 我制作了一个 Android 应用程序 我在想 如何实现通过单击按钮将整个应用程序更改为另一种颜色 例如从白色到黑色 有没有一种方
  • 调整 jQueryUI 对话框的高度,使其与内容一样高,最高可达最大值

    使用 jQueryUI 的对话框 我想弹出信息 我的问题是我想将对话框的高度设置为内容的高度 如果我不指定高度 那么效果很完美 高度根据内容的高度自动计算 那么问题是 如果内容非常高 对话框也会变得非常高并低于窗口 maxHeight 在这
  • TreeView 中的多项选择

    我正在使用 Windows 窗体TreeView在我的程序中进行控制 我想允许用户通过拖动鼠标指针来选择同一级别的多个节点 也称为 套索 选择 我认为没有标准TreeView允许这样做 我的问题是实现这一目标的最佳方法是什么 我是否必须在自
  • Ansible 检查作为变量提到的安装的磁盘空间

    我是 ansible 的新手 目前正在开发一个游戏 该游戏将查看远程计算机的磁盘空间是否已达到 70 的阈值 如果他们已经达到了 它应该抛出错误 我在以下位置找到了一个很好的例子 使用ansible管理磁盘空间 https stackove
  • 脚本缩小和与 MSBuild 的持续集成

    在我最近使用 C ASP NET 进行的一个项目中 我有一些相当复杂的 JavaScript 文件和一些漂亮的样式表 随着这些脚本资源规模的增长建议减少资源 http developer yahoo com yui compressor 当
  • 将 this.refs 作为 React.js 中 jsx 的属性传递

    我试图将 1 个节点作为另一个 React 组件的属性传递 如下所示 render function return div div div div
  • 在 Mac OSX 上卸载 Redis。安装更新后正在运行旧版本

    在Mac上 如何找到旧版本的Redis并将其完全卸载 我使用 OSX 并使用以下命令安装 Redisbrew install redis 由brew安装的版本状态redis 3 0 7 但是 当我运行命令时 redis server输出表明
  • 如何修复“超出最大调用堆栈大小”AngularJS

    我正在使用 AngularJs 和 Ui Router 我试图设置两个不同的主页 一个用于已登录的用户 另一个用于未登录的用户 但我收到以下错误 RangeError Maximum call stack size exceeded I r