2014-03-02 41 views
14

我只是做設置此:角JS - 檢查當前的URL路徑相匹配(動態網址參數)

app.config(['$routeProvider',function($routeProvider) { 
    $routeProvider 
    .when('/asd/:id/:slug',{ 
    templateUrl:'views/home/index.html', 
    controller:'Home', 
    publicAccess:true, 
    sessionAccess:true 
    }); 

:ID和:蛞蝓是動態PARAMS。

現在我想check if current url matches這條路線(/asd/:id/:slug

例如網址:asd/5/it-is-a-slug

這是最簡單的方法是什麼?

我tryed這一點:

$rootScope.$on('$routeChangeStart', function(){ 
    console.log($route.current); 
}); 

但有時在切換頁面的路線

+1

您可以將$ route服務注入到您的控制器並檢查'$ route.current'以獲取當前路由。不需要映射網址。 –

+0

你的意思是在'Home'控制器中,因爲可以將多條路線映射到它?正如@KhanhTO所說,注入'$ route'並檢查'$ route.current.params'或其他什麼。雖然我認爲你的代碼應該更關心你是否有參數,而不是URL是否匹配。如果具有不同含義的完全不同的URL會觸及相同的控制器,則應該使用不同的控制器。 –

+0

@EmersonFarrugia我實際上無法理解爲什麼它在每個routeChangeStart上不能正常工作,似乎有時$ route.current不可用 – sbaaaang

回答

25

當前路線允許您使用正則表達式。注入$route服務並探索當前路由對象。即regexp部分:

$route.current.regexp 

這是可以如何使用它(例如,從控制器的方法,以檢查是否具有動態部分當前菜單項()應被激活):

$scope.isActive = function (path) { 
    if ($route.current && $route.current.regexp) { 
     return $route.current.regexp.test(path); 
    } 
    return false; 
}; 
+0

爲什麼在第一頁加載$ route.current似乎不可用?而在第一次瀏覽頁面時出現然後可用 – sbaaaang

+0

我認爲這與消化循環的工作方式有關。它需要評估手錶表達至少兩次以瞭解它已經改變。 – dfsq

1

你可以嘗試這樣的事情沒有返回控制檯:

$routeProvider.when('/asd/:id/:slug', { 
    templateUrl: '/views/template.html', 
    controller: 'YourController', 
    resolve: { 
     data: ['$route', 'SecurityFactory', 
     function ($route, SecurityFactory) { 

      var id= parseInt($route.current.params.id, 10); 
      var slug= $route.current.params.slug; 

      SecurityFactory.checkParams(id, slug); 
     } 
     ] 
    } 
    }); 

然後裏面的SecurityFactory你可以檢查參數的有效性。例如RegExp

+0

爲什麼在第一頁加載$ route.current似乎不可用?而在第一次瀏覽頁面時出現然後可用 – sbaaaang

0

不是一個非常優雅的解決方案,而我只在Chrome DevTools測試,但它似乎工作:

Object.getPrototypeOf($route.current) === $route.routes['/asd/:id/:slug']; 

看來,$路由服務的路由屬性是一個對象字面將鍵設置爲每個路線的模式。

對於其他人想要使用它,只需將'/asd/:id/:slug'替換爲您在定義路線時使用的模式。

此外,如果你想匹配的otherwise路徑,只需使用$route.routes['null']

免責聲明:這只是一種變通方法,我發現和我的作品。鑑於此行爲沒有記錄,並且我沒有對其進行測試以查看它是否適用於所有情況,所以使用它需要您自擔風險。

相關問題