2014-09-19 95 views
4

我試圖觸發控制器中的函數內部的angularJS路由,但它會拋出「未捕獲的TypeError:無法讀取未定義的屬性'路徑'」。無法真正看到我錯過了$位置注入的位置,猜測它是原因。Angularjs路由:無法讀取未定義的屬性「路徑」

var gameApp = angular.module('gameApp', ['ngRoute']); 

gameApp.config(function($routeProvider, $locationProvider, $provide) { 
    $locationProvider.html5Mode(true); 
    $routeProvider 

    // route for the home page 
    .when('/', { 
    templateUrl : 'home.html', 
    controller : 'mainController' 
    }) 

    // route for the game page 
    .when('/game', { 
    templateUrl : 'game.html', 
    controller : 'gameController' 
    }) 

    // route for the game over page 
    .when('/game-over', { 
    templateUrl : 'game-over.html', 
    controller : 'mainController' 
    }) 

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

我的遊戲控制器的一部分,當我使用路由器

gameApp.controller('gameController', ['$scope', '$location', function($scope, $location){ 
    function gameLost($location){ 
     var check = false; 
     console.log ('You lose! Your score is ') 
     $location.path('/game-over'); 

}])

回答

6

看看這段代碼:

function gameLost($location) { 
     var check = false; 
     console.log ('You lose! Your score is ') 
     $location.path('/game-over'); 
} 

除非你調用這個函數像這樣gameLost($location)(我懷疑)$location將最終成爲未定義的LO cal功能範圍,覆蓋來自父閉合範圍的$location服務。

所以,我認爲,所有你需要做的是從gameLost函數定義中刪除$location paremeter:

function gameLost() { 
     var check = false; 
     $location.path('/game-over'); 
} 
+0

謝謝,這肯定有助於擺脫錯誤的。將$ location作爲函數參數傳遞給調用該函數的地方也會做同樣的事情。然而,路由不會發生。如果您或任何人有任何想法,我將不勝感激。 – vitalym 2014-09-19 10:32:04

+0

我得到了這個「http:// localhost:8000 /#!/ game-over」爲什麼這個 - >'/#!/'? – Benyamin 2018-01-24 05:09:53

+1

@Benyamin如果你不使用歷史模式('$ locationProvider.html5Mode(true)'),那麼後備將是散列模式'#'或'#!'。 https://docs.angularjs.org/guide/$location – dfsq 2018-01-24 08:51:04

相關問題