2015-12-22 46 views
3

在Angular中比較網址您好我正在嘗試使用登錄服務在angular.js中爲我的單頁應用打開某些節(即'call.html'不執行身份驗證)。

我想知道我該如何獲得路徑(http://www.example.com/app/#/call/1234),以便我可以比較它並重定向到「登錄」頁面,如果頁面不是「call.html」?

我已經得到了我app.js下面的代碼,這似乎工作,但在瀏覽器不工作,我得到以下錯誤:

TypeError: $location.path(...).contains is not a function 

app.js

app.run(['$rootScope', '$location', '$cookieStore', '$http', 
    function ($rootScope, $location, $cookieStore, $http) 
    { 
     $rootScope.globals = $cookieStore.get('globals') || {}; 
     if ($rootScope.globals.currentUser) 
     { 
      $http.defaults.headers.common['Authorization'] = 'Basic' + $rootScope.globals.currentUser.authdata; // jshint ignore:line 
     } 
     $rootScope.$on('$locationChangeStart', function (event, next, current) 
     { 
      // redirect to login page if not logged in 
      if($location.path().contains('call')) 
      { 
       return; 
      } 

      else 
      { 
       if ($location.path() !== '/login' && !$rootScope.globals.currentUser && $location.path() !=='/') 
       { 
        $location.path('/login'); 
       } 
      } 
     }); 
    } 
]); 

任何幫助如何解決這個問題將不勝感激。

+1

我會建議使用ngRoute https://docs.angularjs.org/api/ngRoute或UI路由器HTTPS ://github.com/angular-ui/ui-router –

回答

8

包含的是jquery方法,而不是angularjs。所以,使用這行代碼:

if($location.path().contains('call')){ 

顯然會拋出一個錯誤,「contains不是一個函數」。

您可以使用indexOf

if($location.path().indexOf('call') > -1){ 
+0

解決方案非常棒..謝謝。 – snowflakes74

+0

很高興爲您效勞。 –

1

$locationProvider默認使用hashbangs(如明顯的從你的路徑/app/#/call/1234),所以如果你不設置html5Modetrue,你會如果你嘗試獲取的URL路徑得到一個空字符串。

嘗試設置$locationProvider.html5Mode(true)並且您應該能夠獲取URL路徑。

0

你可以這樣做: -

var url = $location.url(); 
if(url.indexOf('call') > -1){ 
    console.log("Call present"); 
} 
相關問題