【问题标题】:AngularJS - RangeError: 'Maximum call stack size exceeded after' application startAngularJS - RangeError:“应用程序启动后超出最大调用堆栈大小”
【发布时间】:2016-04-03 12:03:19
【问题描述】:

在通过 NetBeans 运行 AngularJS 应用程序后,出现标题中提到的错误。我看不到堆栈重载的任何点,正如您所见,我只为登录表单处理初始化了两个变量(我正处于我的 AngularJS 冒险的开始)。可能是硬件问题还是我在这里犯了一些无意识的错误?

错误:

RangeError: Maximum call stack size exceeded
    at c (public_html/bower_components/angular/angular.min.js:115:232)
    at http://localhost:8383/LoginJS/bower_components/angular/angular.min.js:115:506
    at q (public_html/bower_components/angular/angular.min.js:7:355)
    at Object.error (public_html/bower_components/angular/angular.min.js:115:475)
    at http://localhost:8383/LoginJS/bower_components/angular/angular.min.js:89:12
    at ra (public_html/bower_components/angular/angular.min.js:69:475)
    at xa (public_html/bower_components/angular/angular.min.js:58:270)
    at xa (public_html/bower_components/angular/angular.min.js:58:402)
    at ba (public_html/bower_components/angular/angular.min.js:56:264)
    at A.link (public_html/bower_components/angular-route/angular-route.min.js:7:224) (13:52:05:371 | error)

app.js

angular.module('myapp', ['ngRoute']).config(function($routeProvider) {
         $routeProvider
                 .when('/', {
                     templateUrl: 'index.html'
         })
                 .when('/dashboard', {
                     templateUrl: 'dashboard.html'
         })
                 .otherwise(({
                     redirectTo: '/'
         }));
});

loginCtrl.js

angular.module('myapp').controller('loginCtrl', function($scope, $location) {
    $scope.submit = function() {
        var username = $scope.username;
        var password = $scope.password;

        if($scope.username == 'admin' && $scope.password == 'admin') {
            $location.path('/dashboard');
        }
    };
})

index.html

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="bower_components/angular/angular.min.js" type="text/javascript"></script>
        <script src="bower_components/angular-route/angular-route.min.js" type="text/javascript"></script>
        <script src="app.js" type="text/javascript"></script>
        <script src="scripts/controllers/loginCtrl.js" type="text/javascript"></script>
    </head>
    <body ng-app="myapp">
        <div ng-view></div>
        <div ng-controller="loginCtrl">
            <form action="/" id="login">
                Username: <input type="text" name="username" id="username" ng-model="username"><br>
                Password: <input type="password" name="password" id="password" ng-model="password"><br>
                <button type="button" ng-click="submit()">Login</button>
            </form>
        </div>
    </body>
</html>

dashboard.html

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="bower_components/angular/angular.min.js" type="text/javascript"></script>
         <script src="bower_components/angular-route/angular-route.min.js" type="text/javascript"></script>
        <script src="app.js" type="text/javascript"></script>

    </head>
    <body ng-app="myapp">
        <div ng-view></div>
        some text
    </body>
</html>

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    因为您为页面加载了所有脚本文件并为'/' 路径加载了index.html 循环加载index.html 页面,这就是您收到此错误的原因。

    dashboard.html 无需再次加载您的脚本文件,只需写下您的信息即可。并且您的登录表单会移动到另一个页面,例如 login.html,并参考此页面的路径 "/"

    喜欢:

    路由提供者:

    .when('/', {
          templateUrl: 'login.html'
     })
    

    index.html页面

    <body ng-app="myapp">
        <h1>Welcome </h1>
        <div ng-view></div>
    </body>
    

    login.html页面

    <div ng-controller="loginCtrl">
          <form action="/" id="login">
              Username: <input type="text" name="username" id="username" ng-model="username"><br>
              Password: <input type="password" name="password" id="password" ng-model="password"><br>
              <button type="button" ng-click="submit()">Login</button>
          </form>
     </div>
    

    dashboard.html

    <div ng-controller="CtrlName"> //ng-controller="CtrlName" if need ctrl and also can use ctrl in route provider
       <h2> Dashboard page</h2>
       // all of your information's 
    </div>
    

    它可能会完美运行

    【讨论】:

    • 我根据您的建议修改了dashboard.html,错误没有消失
    • 你有没有做循环引用的函数?并可以尝试将登录信息转移到另一个 html 页面,如 login.html,对于 '/' 路径,将该页面称为 templateUrl 而不是 index.html @Mike
    • 谢谢,现在很好@shaishab roy
    • 非常感谢,我的问题出在.otherwise() 方法上。这一次又一次将我重定向到index.html,使堆栈超出。
    【解决方案2】:

    使用方向上的脚本控制再次加载您的脚本文件,只需写下您的信息即可。并且您的登录表单会移动到另一个页面,例如 login.html,并参考此页面的路径 "/"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 2021-07-11
      相关资源
      最近更新 更多