2013-08-23 23 views
1

從Django的世界即將URL標籤,我只是愛上了它是關於URL實用的功能,妨礙我們硬編碼在模板中的URL &觀點:的角度

In urls.py: 
url(r'/url/param1/param2/$', 'view_name', name="URL_NAME"), 

In Template: 
<a href="{% url "URL_NAME" @param1 &param2 ... %}">My link</a> 

這樣,如果我想改變這個URL我不必在我的多個文件中改變它。我想知道角度是否允許我們也這樣做。現在我必須寫這樣的東西:

In my App: 
when('/home', { 
     templateUrl: 'app/home/home.tpl.html' 
    }). 

In my view: 
<a href='#/home'>my link</a> 

感謝您的幫助。

回答

2

這是一個簡單的解決方案。

首先,我在$ routeProvider配置中添加了視圖的名稱。 例如,我們所定義的路由的名稱「/登錄/:ARG1 /與/:ARG2」到「VIEW_NAME」:

myApp.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/login/:arg1/with/:arg2', { 
      templateUrl: 'app/common/login/login.tpl.html', 
      name: 'my_view_name' 
     }). 

然後,我創建了一個指令,動態地改變你的視圖名稱爲正確的網址:

myApp.directive('viewUrl', function ($route) { 
    return { 
     restrict: 'A', 
     link: function (scope, elem, attrs) { 
      var splitArgs = attrs.viewUrl.split(' '); 
      var view_name = splitArgs.shift(); 
      var url="route not found"; 
      for(var route in $route.routes){ 
       if ($route.routes[route].name == view_name){ 
        url = route; 
       } 
      } 
      for (var arg in splitArgs) { 
       keyValue = splitArgs[arg].split(':'); 
       url = url.replace(":"+keyValue[0], keyValue[1]); 
      } 
      elem.prop('href', url); 
     } 
    } 
}); 

現在你可以使用view-url屬性在你的HTML組件這樣的:

<a view-url="my_view_name arg1:value1 arg2:value2">Hello World</a> 

這將在href元素添加到您的鏈接,你會得到這樣的結果:

<a view-url="my_view_name arg1:value1 arg2:value2" href="/login/value1/with/value2">Hello World</a> 

照顧你的論點的名稱,因爲我正在使用替換函數。

+0

來自django自己,這不是一個Angular內置的事實超出了我。 – qff