0

我正在使用 AngularJS 路由来提供单页应用程序。配置是:

var ewiApp = angular.module("ewi", []);
ewiApp.config(function ($routeProvider, $locationProvider) {
    $routeProvider.when('/home',
        {
            templateUrl: '/private/app/index.html'
        });
    $routeProvider.when('/alarms/active',
        {
            templateUrl: '/private/app/alarms/partials/active.html',
            controller:  'ActiveAlarmListCtrl'
        });
    $routeProvider.otherwise({redirectTo: '/home'});
    $locationProvider.html5Mode(true).hashPrefix('!');
});

我遇到的问题是,当我键入“/”或“/abc”或“/alarms/active”以外的任何内容时,angularjs 库进入无限循环,试图加载 index.html 文件及其所有内容一遍又一遍地使用 javascript、css 和图像文件。我注意到每个文件请求都添加了时间戳。我似乎 angularjs 试图不使用已经加载的文件的缓存版本。这将永远持续下去,直到我关闭浏览器选项卡。

我包括以下 javascript 库以及我们自己的一些库:

<script src="/lib/jquery/jquery-1.10.1.js"></script>
<script src="/lib/jquery/jquery-migrate-1.2.1.js"></script>
<script src="/lib/bootstrap/bootstrap.min.js"></script>
<script src="/lib/angular/angular.js"></script>

我看过一些讨论如何设置 AngularJS 路由的在线视频,它们都提到还需要一些服务器配置,但我没有看到任何具体确定服务器配置需要的内容。我想知道 angularjs 库中的无限循环问题是否与我需要在服务器上更改的内容有关?我正在使用 lighttpd 网络服务器。

我想知道是否有其他人遇到过这个问题?

4

2 回答 2

0

我不完全确定这是问题所在,但通常我不提出;在每条路线之后。像这样链接它们:

var ewiApp = angular.module("ewi", []);
ewiApp.config(function ($routeProvider, $locationProvider) {
    $routeProvider
    .when('/home',
    {
        templateUrl: '/private/app/index.html'
    })
    .when('/alarms/active',
    {
        templateUrl: '/private/app/alarms/partials/active.html',
        controller:  'ActiveAlarmListCtrl'
    })
    .otherwise({redirectTo: '/home' })

});

像这样的东西应该工作。

于 2013-06-26T21:16:28.833 回答
0

好吧,我觉得自己很愚蠢,但是我发现了当输入“/home” URL 或触发“otherwise”子句时,AngularJS 库进入无限循环的原因。

问题是由于我对以下语句的 templateURL 的规范:

$routeProvider.when('/home', {
    templateUrl: '/private/app/index.html'
});

由于主(单页)页面已经是“/private/app/index.html”文件,该规范导致“index.html”文件的内容被加载到同一个文件。然后这会导致重新加载所有指定的链接,然后包含页面中的 <ng-view> 标记导致请求加载另一个“index.html”页面,一遍又一遍。

解决方法是将上面的代码更改为:

$routeProvider.when('/home', {
    templateUrl: '/private/app/home/partials/home.html',
    controller: 'HomeCtrl"
});

现在,对于每个指定的“when()”URL、“/home”URL 和任何伪造的 URL(如“/abcdef”。

于 2013-06-27T22:46:10.230 回答