Javascript 带ng视图的AngularJS无限循环

Javascript 带ng视图的AngularJS无限循环,javascript,angularjs,infinite-loop,Javascript,Angularjs,Infinite Loop,我刚刚开始使用AngularJS开发一个新的应用程序,我正在考虑组装它,但在使用路由和视图时遇到了一个问题 我已经把这个例子精简到最低限度,但问题仍然存在。这个示例所做的就是点击服务器并返回index.html页面,然后返回index.html页面等 index.html <!doctype html> <html lang="en" ng-app="main"> <head> <meta charset="utf-8" />

我刚刚开始使用AngularJS开发一个新的应用程序,我正在考虑组装它,但在使用路由和视图时遇到了一个问题

我已经把这个例子精简到最低限度,但问题仍然存在。这个示例所做的就是点击服务器并返回index.html页面,然后返回index.html页面等

index.html

<!doctype html>
<html lang="en" ng-app="main">
    <head>
        <meta charset="utf-8" />

        <link rel="stylesheet" type="text/css" src="css/style.css" />

        <script type="text/javascript" src="js/ext/angular.min.js"></script>
        <script type="text/javascript" src="js/ext/angular-route.min.js"></script>
        <script type="text/javascript" src="js/main.js"></script>
        <script type="text/javascript" src="js/test.js"></script>

        <base href="/ui/">
    </head>
    <body>
        <div ng-view></div>
    </body>
</html>
<div>FooBar!</div>
test.js

(function() {
    var app = angular.module('main', ['ngRoute', 'test']);

    app.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {

        $routeProvider
            .when('/test', {
                templateUrl: 'html/test.html',
                controller: 'TestCtrl'
            })
            .otherwise({
                redirectTo: '/test'
            });

        $locationProvider.html5Mode(true);
    }]);
})();
(function() {
    var app = angular.module('test', []);

    // get hierarchy
    app.controller('TestCtrl', ['$scope', function($scope) {

        alert('here');

    }]);
})();
test.html

<!doctype html>
<html lang="en" ng-app="main">
    <head>
        <meta charset="utf-8" />

        <link rel="stylesheet" type="text/css" src="css/style.css" />

        <script type="text/javascript" src="js/ext/angular.min.js"></script>
        <script type="text/javascript" src="js/ext/angular-route.min.js"></script>
        <script type="text/javascript" src="js/main.js"></script>
        <script type="text/javascript" src="js/test.js"></script>

        <base href="/ui/">
    </head>
    <body>
        <div ng-view></div>
    </body>
</html>
<div>FooBar!</div>
FooBar!

警报被无限地触发,但我不知道为什么。我见过其他例子,其中ng view和routing的使用方式似乎完全相同,因此我不确定我做错了什么…

我以前也遇到过同样的问题。请在“开发人员工具”面板的同一浏览器中使用firebug或某些网络控件,您可以在其中查看对服务器的资源请求,然后检查是否请求并正确检索了test.html文件。似乎唯一被检索到的是index.html,由于这个原因,循环

可能您必须在之前将此templateUrl值“/html/test.html”与“/”一起使用。将此资源本地化


这就是我向你提出的想法。用正确的方法本地化test.html资源。我希望这能对您有所帮助。

以下是我是如何做到这一点的,例如

代码

.config(['$routeProvider', '$locationProvider',function($routeProvider, $locationProvider) {
$routeProvider
    .when('/test', {
        template: '<div>test</div>',
        controller: 'testCtrl'
    })
    .when('/other', {
        template: '<div>Delete</div>',
        controller: 'otherCtrl'
    })
    .otherwise({
        redirectTo: '/test'
    });

    $locationProvider.html5Mode(true);

}]);
.config(['$routeProvider','$locationProvider',函数($routeProvider,$locationProvider){
$routeProvider
。当(“/test”{
模板:“测试”,
控制器:“testCtrl”
})
。当(“/其他”{
模板:“删除”,
控制器:“otherCtrl”
})
.否则({
重定向到:“/test”
});
$locationProvider.html5Mode(true);
}]);

好的,我解决了我的问题。我接受了sergio的建议,因为它最接近于我意识到问题所在的方式——我的应用程序正在从应用程序服务器请求html文件,该服务器设置为将index.html文件作为默认操作返回。由于html请求没有关联的操作,因此返回index.html的默认响应将取代test.html文件

一旦我更改了url,以便它从web服务器获取html文件,一切都很顺利。如果我早一点想一想到底发生了什么事情,那就很明显了


谢谢你的回复

我今天是在2016年3月发行的。我刚刚发现,当html中存在ng视图时,是什么导致了无限循环(在我的例子中,index.html是在开始时加载的初始html)

好吧,问题毕竟很简单。我在app.js中设置了此路由提供程序

angular.module('myapp',['ngRoute'])
    .config(function($routeProvider) {
      $routeProvider
      .when('/', {
          templateUrl:'/index.html',
          controller:'MyAppCtrl'
      })

因为加载的初始html是index.html,并且该点的url是“/”,routeProvider在“/”时调用代码。是的,它一次又一次地加载index.html。。。直到它死去。解决方案不是将index.html设置为“/”路由的templateUrl。html(模板)不应包括

控制台中是否有任何消息(如html/test.html未找到)?您还可以尝试删除html并将其放在根目录中吗?最后一件事:把你的重定向路由到另一个需要测试的地方。我要把这个放在小提琴上。看看会发生什么,看不到任何明显的因素。