2017-02-14 62 views
2

我一直在使用TMDb API和AngularJS做一個迷你項目。我的角度路由部分的作品,我可以加載點擊電影的詳細信息。主頁上的點擊會帶您到詳細信息視圖和URL更改爲movie/:id/:title,現在如果用戶單擊詳情視圖中存在的另一個電影,則新點擊的電影的相關數據將替換以前的數據。現在,如果我嘗試返回使用瀏覽器,以前的電影的數據不會加載,但URL顯示前一部電影的標題。AngularJS路由鏈接在重新加載時不起作用

隨着這個錯誤,還有一個其他的錯誤。當我嘗試重新加載瀏覽器時,它會導致404錯誤。如果我打開html5Mode(true)這發生。如果我禁用html5Mode該頁面不顯示相關信息,但在視圖中顯示一個空模板。我只是AngularJS的初學者。我不知道如何解決這個問題。我已經提到了我託管網站的域名。我想,看着它會更容易理解我的問題。希望有人在這裏能幫助我。

項目網址:http://movie-buffs.xyz/

這是我的路由代碼。

.config(['$routeProvider','$locationProvider', function($routeProvider, $locationProvider){ 
      $routeProvider 
      .when('/',{ 
       templateUrl:'templates/movies.html' 
      }) 
      .when('/movies/:id/:title',{ 
       templateUrl:'templates/moviedetails.html' 
      }) 
      .when('/search',{ 
       templateUrl:'templates/search.html' 
      }) 
      .when('/tv',{ 
       templateUrl:'templates/tv.html' 
      }) 
      .when('/tv/:id/:title',{ 
       templateUrl:'templates/tvdetails.html' 
      }) 
      .when('/celebs',{ 
       templateUrl:'templates/celebs.html' 
      }) 
      .when('/celebs/:id/:name',{ 
       templateUrl:'templates/celebsdetails.html' 
      }) 
      .when('/contact',{ 
       templateUrl:'contact_us.html' 
      }) 

      .otherwise({ 
       redirectTo:'/' 
      }); 

    $locationProvider.html5Mode(true); 
     }]); 

回答

0

解決方案1 ​​

angularjs提供html5Mode,這使得你的應用程序使用的基於pushState的-網址,而不是主題標籤。然而,這需要服務器端的支持,因爲生成的URL需要正確渲染爲好。

只需複製的index.html到404.html,並添加到您的應用程序:

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

請找this鏈接瞭解更多信息

解決方案2

打開的索引。 html頁面,並在頭部分添加

<base href="/"> 

你的角碼啓動html5Mode

angular.module('main', []).config(['$locationProvider', function($locationProvider) { 
     ... 
     $locationProvider.html5Mode(true); 
     ... 
    }); 

這樣做了以後,你需要創建共享Apache服務器的根.htaccess文件作爲您使用的是Apache服務器添加以下代碼

Apache服務器

RewriteEngine On 
    # If an existing asset or directory is requested go to it as it is 
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] 
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d 
    RewriteRule^- [L] 

    # If the requested resource doesn't exist, use index.html 
    RewriteRule^/index.html 

IIS服務器

<rewrite> 
  <rules> 
    <rule name="AngularJS" stopProcessing="true"> 
      <match url=".*" /> 
      <conditions logicalGrouping="MatchAll"> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="/" /> 
    </rule> 
  </rules> 
</rewrite> 

就是這樣

+0

我已經添加了該代碼。你能幫我解決意見不加載問題嗎? :) –

+0

您是否將您的index.html代碼複製到404.html?只是將該頁面複製到404頁面,這就是所有工作 – Curiousdev

+0

我沒有404.html頁面設置,所以它去我的虛擬主機的鏈接(Hostinger)。查看我附加到問題的URL。 –

0

尼斯網頁!嘗試從Curiousdev的HTML5模式的答案。而且我認爲你可以使路由簡單。你可以從

('/movies/:id/:title') 

路由更改爲

('/movies/:id') 

這裏是IMDB上一部電影的例子:

http://www.imdb.com/title/tt1219827/?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=2896364242&pf_rd_r=0QKNGNCGK3XM4PBDN2A0&pf_rd_s=hero&pf_rd_t=15061&pf_rd_i=homepage&ref_=hm_hp_cap_pri_2

他們不提供標題在網址

進一步:如果你想打破角度路由的問題,刪除所有額外的jQuery腳本等。確保它在你添加酷酷的東西之前有效

+0

謝謝你的讚美。 :)即使我更改了路由的URL,我也不會將電影結果與URL相關聯。 http://movie-buffs.xyz/movies/207703/Kingsman:%20The%20Secret%20Service此鏈接加載空視圖。 –

0

這就是我的做法。在我的配置中。

.config(['$routeProvider', function ($routeProvider) { 
$locationProvider.html5Mode(false).hashPrefix(''); 
$routeProvider.otherwise({redirectTo: '/dashboard'});}]); 

我把與相應的JS在HTML中的文件夾例如:

/movie-details/movie-detail.html 
/movie-details/movie-detail.js 

我的電影details.js應該是這個樣子:

'use strict'; 
angular.module('myapp') 
    .config(['$routeProvider', function ($routeProvider) { 
     $routeProvider.when('/movies/:Id', { 
      templateUrl: 'movie-details/movie-detail.html', 
      controller: 'MovieDetails as vm' 
     }); 
    }]) 
    .controller('MovieDetails', function ($scope, $routeParams) { 
     var vm = this; 
     vm.movieId= $routeParams.Id; 

    }); 

你不會需要的HTML任何控制器指令。只是:

{{vm.something}} 
+0

我會試試這個。感謝您的幫助 –

+0

這樣,您將保持與html和js一起的路由。希望這會讓網站更容易成長。您的問題可能是因爲控制器在路由命中時未加載。也許... –

+0

我修復了所有的錯誤,非常感謝您的幫助。 :) –

相關問題