2013-05-26 63 views
3

我正在將Angular整合到現有Rails應用程序的單個頁面中。Angular App中的外部鏈接

一切都與路由在頁面中使用以下

app.config(function($routeProvider, $locationProvider) { 
    $routeProvider 
     .when('/services/:id', { 
     templateUrl: "/javascripts/angular/templates/service_ui/service.html", 
     controller: "ServiceCtrl" 
    }) 

    $locationProvider.html5Mode(true); 
}); 

但是可以正常使用,我想對於那些不相關的鏈接角維持正常功能。例如,我們在標頭中有許多鏈接,這些鏈接鏈接到其他地方,現在正被角度路由器捕獲。

我發現一些潛在的解決方案:https://groups.google.com/forum/?fromgroups#!topic/angular/basidvjscRk

但似乎沒有work..and目標=「_自我」的方法是相當突兀的基本路徑方法。有沒有更好的方法讓角度忽略配置功能中未指定的路由?

我知道有一個.otherwise()方法,但這又似乎是一個黑客。我錯過了什麼嗎?

非常感謝!

+5

我認爲Google網上論壇的答案非常可靠。 'target =「_ self」'方法似乎絕對符合Angular的精神,因爲它是對這個問題的一種陳述式方法。 – Langdon

+0

可能的重複:http://stackoverflow.com/questions/13023338/conditionally-have-anchor-links-send-user-to-a-different-page-rather-than-load/13031727 – Martin

+0

target =「_ self」似乎使用Angular與turbolinks(對於相同網站頁面)結合使用時會導致整頁重新加載。 – dps

回答

8

我們有一個相對「傳統」的Web應用程序,因爲大多數鏈接都會觸發整頁重新加載;很少有鏈接通過Angular的路由系統。我們的模塊定義之後,我們有以下幾點:

app.run(function($location, $rootElement) { 
    $rootElement.off('click'); 
}); 

這是停止使用角度來處理的URL,比如當你點擊一個鏈接的built-in interception of clicks;現在必須手動使用$location,無論何時您希望Angular 都能做到它的URL魔法(例如通過ngClick和相應地操作$location的函數)。

您可以考慮將$rootElement.off與特殊指令或配置功能結合使用,該功能會在您檢測到的鏈接上重新安裝此行爲包含特定URL片段。

+0

我一直在尋找這個。謝謝。 – dps

0

另一個可能適用於您的選項是更改$rootElement:鏈接攔截只發生在聲明爲ng-app的元素中。

在我的情況下,我從<body ng-app="myApp">切換到<section id="my-rich-area" ng-app="myApp">

這對我很有用,因爲我沒有在該部分中的任何同一領域,無角鏈接,ymmv。