2013-06-26 70 views
0

我正在使用AngularJS路由來提供單頁面應用程序。配置是:要使AngularJS路由功能正確,需要什麼Web服務器配置?

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」或比「/報警/主動」其他任何內容,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 Web服務器。

我想知道是否有其他人遇到過這個問題?

+0

什麼版本的棱角分明? –

+0

我使用AngularJS v1.0.7 –

+0

我只是想AngularJS V1.1.5和無限循環文件重裝問題依然存在。 –

回答

0

嗯,我覺得很蠢,但是我發現當輸入「/ home」URL或觸發「otherwise」子句時,AngularJS庫會進入無限循環的原因。

的問題是由於我的規格爲templateURL以下語句:

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

因爲主(單頁),該頁已經在「/private/app/index.html」的文件,這規範導致「index.html」文件的內容被加載到相同文件的標籤部分。然後這導致指定的所有鏈接被重新加載,然後在包含的頁面內的標籤導致請求加載另一個「index.html」頁面,再次重複。

的修復是改變上面的代碼:

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

現在一切正常,每個指定的「當()」的網址,在「/家」的網址,任何虛假的URL(如「/ ABCDEF」。

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' }) 

}); 

這樣的事情應該工作。

+0

謝謝,我試過了,但無限重裝問題仍然存在派。 –

+0

有趣,你有一個REST服務器設置?或者是你正在談論的服務器配置? – tattooedgeek

+0

我不認爲我的服務器是REST服務器。我看過的AngularJS路由上的視頻表示,如果未指定在AngularJS $ routeProvider.when()調用中設置的URL,則必須將服務器設置爲提供index.html文件。我不確定我需要在服務器上做什麼。現在,當指定未知的URL時,它將返回index.html文件的內容。我注意到,重定向到index.html文件不起作用,所以我只是返回文件的任何未知的請求。 –