2015-09-20 46 views
1

我打算使用Prerender.io將我的SPA(使用AngularJS構建)轉換爲緩存頁面的集合。該應用程序/網站是多語言(英語和法語),我使用Angular Dynamic Locale來處理語言切換。與菜單項不同,切換器中的語言鏈接不包含帶路由路徑的href,而是綁定到基本上更新變量並重新加載路由的控制器。如何讓Prerender.io在沒有顯式設置路由時識別唯一頁面?

我的問題是這樣的:如何讓Prerender.io識別獨特的頁面,當它沒有顯式設置路由時?當然,我的目標是讓每個頁面的法文版本分開緩存。

目前,我在連接到語言切換器的控制器中設置查詢參數(請參閱下面的摘錄)。這是由ng-click上的功能觸發的。 Prerender.io會把它作爲一個單獨的頁面嗎? (這是我的理解,Prerender.io確實將查詢參數的路徑/路徑視爲單獨的頁面,除非被告知要明確地忽略它;我的問題更多地是關於是否將參數設置在控制器中而不是錨標記可能會改變的東西)

下面是語言切換模板加價:

<nav class="lang-switcher" ng-controller="LanguageCtrl"> 
    <a href ng-click="changeLanguage('en')" ng-class="{current: language == 'en'}">English</a> 
    <a href ng-click="changeLanguage('fr_FR')" ng-class="{current: language == 'fr_FR'}">Français</a> 
</nav> 

控制器(我已刪除了不相關的問題)的代碼:

.controller('LanguageCtrl', ['$scope', '$route', '$location', function ($scope, $route, $location) { 

    $scope.changeLanguage = function(lang) { 

    // Do some stuff. 

    // If the page is in French, attach query parameter to the URL. 
    $location.path($location.path()).search({'lang': (lang == 'fr_FR' ? 'fr' : null)}); 

    $route.reload(); 
    }; 
}]) 

當然,一旦頁面被緩存爲靜態,切換器鏈接會發生什麼問題。但在時間的一個障礙... :)

在此先感謝!

回答

2

抓取工具不會點擊鏈接,因此您需要在其中填寫href標籤。這樣他們的抓取工具將解析鏈接,然後向另一個鏈接發出另一個請求。

<nav class="lang-switcher" ng-controller="LanguageCtrl"> 
    <a href="/path?lang=en" ng-click="changeLanguage('en')" ng-class="{current: language == 'en'}">English</a> 
    <a href="/path?lang=fr" ng-click="changeLanguage('fr_FR')" ng-class="{current: language == 'fr_FR'}">Français</a> 
</nav> 

如果你不告訴Prerender.io忽略它你是正確的,Prerender.io將分別緩存URL具有不同的查詢參數。

+0

這就是我懷疑的。感謝您的快速回復。 – othermachines