2015-03-31 97 views
1

學習Angular並遇到問題我似乎找不到「好」的答案。我一直在關注official Tutorial,並且與我正在進行的項目有類似的設置。如何使失敗的路由解析承諾加載不同的模板URL?

$ routeProvider .when電話詳細信息案例根據電話列表頁面中單擊的電話名稱獲取特定的.JSON文件。問題是,如果您輸入的電話名稱沒有與之關聯的.JSON文件,路由仍會繼續並顯示空白頁面。我試圖弄清楚如何防止這種情況。

我已經得到儘可能爲.when路由添加一個決心。但是,我只能阻止視圖更改或使用$ location.path重定向。這些都不是理想的。

我該如何着手顯示沒有JSON文件的手機的「404頁面」視圖?在我的腦海中,如果GET請求使用404響應,我會顯示一個不同的templateUrl,但似乎無法使其工作。

任何幫助將是偉大的!

這是我到目前爲止的代碼:

我的路線處理。

.when('/game/:Game', { 
    templateUrl: 'views/game-detail.html', 
    controller: 'GameDetailCtrl', 
    resolve: { 
     myData: ["Games", "$location", "$q", "$timeout",'$rootScope', function(Games, $location, $q, $timeout,$rootScope) { 
     var def = $q.defer(); 

     var path = $location.path().toString().substring(6); 

      // Games service 
     Games.get({gameName: path}, function(game, s) { 

      }).$promise.then(
      function(data) { 
       // found game data 
       def.resolve(data); 
      }, 
      function(error) { 
       // couldn't find JSON file 
       def.reject(error); 
      } 
     ); 

     return def.promise; 
     }] 
    } 
    }).when('/pageNotFound', { 
    templateUrl: 'views/error.html' 
    }) 

根範圍路由改變錯誤監聽:

$rootScope.$on("$routeChangeError", 
    function(event, current, previous, rejection) { 
    console.log("failed to change routes"); 
    //$location.path('/pageNotFound'); 
    }); 
+0

貴' $ routeChangeError'處理程序火嗎? – ExceptionLimeCat 2015-03-31 21:33:34

+0

是的。它會觸發並識別失敗的路線。 – Taz 2015-04-01 22:05:17

回答

1

嗯,你真的不這樣做的,你會在這種情況下,做的是讓你的HTML模板包含模板對於成功和失敗的情況以及在切換狀態時,在呼叫失敗或成功時,內部的ng-switch都可以進行翻轉。

另外,我覺得,如果你試圖複製從指令的想法,以及它的工作: Angular.js directive dynamic templateURL

+0

感謝您的回覆。我在用ng-show來思考類似的東西。 – Taz 2015-03-31 21:25:20

+0

沒問題。有很多方法可以做到這一點。沒有一個是真正的錯誤,有些只是比其他的更容易。你也可以實現一個全局模態,可以從任何地方調用,以顯示各種事情,包括錯誤狀態。在github上有一個足夠簡單的ng模式庫,你可以插入。 – SoluableNonagon 2015-04-01 15:12:12

0

你可以嘗試用下面的代碼更改路徑:

 function(error) { 
      // couldn't find JSON file 
      $location.path('/pageNotFound'); 
     } 
+0

我這樣做了,但是遇到了將失敗/遊戲/路由添加到瀏覽器歷史記錄的問題。因此,如果用戶在瀏覽器中點擊「返回」,他們將被重複導向至pageNotFound頁面。 – Taz 2015-03-31 22:05:28