【问题标题】:RangeError: Maximum call stack size exceeded (AngularJS)RangeError:超出最大调用堆栈大小(AngularJS)
【发布时间】:2015-06-18 05:27:41
【问题描述】:

我正在尝试使用 AngularJS 开发 Web 应用程序。我无法使用 ngRoute 路由网页。我已经在 Bottle python 框架中编写了 Web 服务器,这部分没有任何错误。浏览器控制台显示了这个我无法调试的 straneg 错误,说“RangeError:超过最大调用堆栈大小”。以下是代码 sn-ps 和控制台堆栈跟踪。

app.js

var app = angular.module('tslApp', ['ngRoute','datatables','ngCookies']);

app.constant('AUTH_EVENTS', {
      loginSuccess: 'auth-login-success',
      loginFailed: 'auth-login-failed',
      logoutSuccess: 'auth-logout-success',
      sessionTimeout: 'auth-session-timeout',
      notAuthenticated: 'auth-not-authenticated',
      notAuthorized: 'auth-not-authorized'
})

app.run(function ($rootScope,$location,AUTH_EVENTS,$cookieStore,$http,$q,$timeout) {
    $rootScope.flag = false;
    $rootScope.$on('$routeChangeStart', function(evt, absNewUrl, absOldUrl) {
        $cookieStore.get(AUTH_EVENTS);
        if($rootScope.AUTH_EVENTS != AUTH_EVENTS.loginSuccess && !$cookieStore.get(AUTH_EVENTS)){    
            //console.log($rootScope.AUTH_EVENTS);
            $location.path('/');
            //$route.reload();
        }
        if(absNewUrl.$$route.originalPath == '/dashboard' && $rootScope.flag == false){
            $rootScope.flag = true;
        }
            //here you can check for your own condition and if not logged in then set $location.path(loginpath);
      });
});

route.js

app.config(function($routeProvider) {
    $routeProvider
        .when('/', {
            templateUrl : '/assets/app/partials/login.html',
            controller : 'loginCtrl'
        })         
        .when('/dashboard', {
            templateUrl : '/assets/app/partials/main.html'
        })
        .otherwise({
            redirectTo: '/'
        });
});

loginCtrl.js

app.controller('loginCtrl', ['$scope','$rootScope', 'loginFactory', function($scope, $rootScope, loginFactory) {
    $(function() {
        $('#toggle-login').click(function() {
            $('#login').toggle();
        });
    })
    $scope.errormessage = new Object();
    $scope.successMessage = new Object();
    $scope.errormessage.isError = false;
    $scope.successMessage.isSuccess = false;
    $rootScope.AUTH_EVENTS = "auth-not-authorized";
    $scope.login = function(credentials) {
        console.log(credentials);
        loginFactory.login(credentials);
    }
}])

loginFactory.js

app.factory('loginFactory', ['$http', '$q','$rootScope','AUTH_EVENTS' ,'$location','$cookieStore', function ($http,$q,$rootScope,AUTH_EVENTS,$location,$cookieStore) {
    var loginData = {};

    loginData.login = function(credentials) {
        var $promise = $http.post('/login', credentials); //send data to server.py
        $promise.then(function(msg) {
            console.log(msg);
            if (msg.data == 'success') {
                $rootScope.AUTH_EVENTS = AUTH_EVENTS.loginSuccess;
                $cookieStore.put(AUTH_EVENTS, AUTH_EVENTS.loginSuccess);
                $location.path('/dashboard');
            } else {
                $rootScope.AUTH_EVENTS = AUTH_EVENTS.loginFailed;
                scope.errormessage.isError = true;
                scope.errormessage.msg = "Wrong username and password";
                console.log("failed 1");
            }
        }, function() {
            $rootScope.AUTH_EVENTS = AUTH_EVENTS.loginFailed;
            console.log("failed 2");
        });
    }
    return loginData;
}])

console.output 和错误:

Object {username: "cdcd", password: "cdcdc"}
loginFactory.js:7 Object {data: "success", status: 200, config: Object, statusText: "OK"}
angular.js:11383 RangeError: Maximum call stack size exceeded
    at invokeLinkFn (http://localhost:7000/assets/js/angular.js:8127:30)
    at nodeLinkFn (http://localhost:7000/assets/js/angular.js:7637:11)
    at compositeLinkFn (http://localhost:7000/assets/js/angular.js:6993:13)
    at compositeLinkFn (http://localhost:7000/assets/js/angular.js:6996:13)
    at compositeLinkFn (http://localhost:7000/assets/js/angular.js:6996:13)
    at compositeLinkFn (http://localhost:7000/assets/js/angular.js:6996:13)
    at publicLinkFn (http://localhost:7000/assets/js/angular.js:6872:30)
    at link (http://localhost:7000/assets/js/angular-route.min.js:7:388)
    at invokeLinkFn (http://localhost:7000/assets/js/angular.js:8125:9)
    at nodeLinkFn (http://localhost:7000/assets/js/angular.js:7637:11) <div ng-view="" class="ng-scope">(anonymous function) @ angular.js:11383(anonymous function) @ angular.js:8459invokeLinkFn @ angular.js:8127nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664
VM101:1122 <error>InjectedScript._isHTMLAllCollection @ VM101:1122InjectedScript.isPrimitiveValue @ VM101:285InjectedScript.RemoteObject @ VM101:1251InjectedScript._wrapObject @ VM101:387InjectedScript.wrapObject @ VM101:298(anonymous function) @ angular.js:11383(anonymous function) @ angular.js:8459invokeLinkFn @ angular.js:8127nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993publicLinkFn @ angular.js:6872boundTranscludeFn @ angular.js:7011controllersBoundTransclude @ angular.js:7664v @ angular-route.js:865link @ angular-route.js:831invokeLinkFn @ angular.js:8125nodeLinkFn @ angular.js:7637compositeLinkFn @ angular.js:6993compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996compositeLinkFn @ angular.js:6996publicLinkFn @ angular.js:6872link @ angular-route.js:915invokeLinkFn @ angular.js:8125
5VM101:1122 <error>

【问题讨论】:

    标签: javascript python angularjs


    【解决方案1】:

    当下面的代码创建了路由循环时,通常会发生此错误

    app.run(function ($rootScope,$location,AUTH_EVENTS,$cookieStore,$http,$q,$timeout) {
    $rootScope.flag = false;
    $rootScope.$on('$routeChangeStart', function(evt, absNewUrl, absOldUrl) {
        $cookieStore.get(AUTH_EVENTS);
        if($rootScope.AUTH_EVENTS != AUTH_EVENTS.loginSuccess && !$cookieStore.get(AUTH_EVENTS)){    
            //console.log($rootScope.AUTH_EVENTS);
            $location.path('/');
            //$route.reload();
        }
        if(absNewUrl.$$route.originalPath == '/dashboard' && $rootScope.flag == false){
            $rootScope.flag = true;
        }
            //here you can check for your own condition and if not logged in then set $location.path(loginpath);
      });
    });
    

    您可能会从 loginfactory 重定向到路由,并且由于某些情况,它会在 $routeChangeStart 事件中一次又一次地处理

    【讨论】:

    • 看到代码我看不到这样的循环。在 loginFactory 中,基于服务器消息“成功”,我正在使用 $location.path 将路由更改为“/dashboard”,我在 route.js 中提到了该路由。但它不会移动到使用此路由指定为模板的页面。你能指出我可能是循环发生的错误吗?
    • 你能用路由“/”登陆首页吗?如果是,控制台有错误吗?
    • 在路由'/'上时,控制台上没有错误。
    • 我仍然没有明确的答案。我们必须调试它。在两个 if 块上添加一个断点并检查它们是否一次又一次地执行。我确定是仅与 routechangestate 事件相关的内容。(仅供参考,您自己刷新应用程序时会清除 rootscope 确保您没有检查任何此类情况)
    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2021-07-11
    • 2019-07-05
    相关资源
    最近更新 更多