2015-06-03 74 views
1

使用AnguarJS,我想隨時在當前網站中單擊的鏈接中存在特定主機名稱時調用函數。用戶將繼續點擊鏈接,但該功能將在後臺調用。AngularJS路由 - 基於匹配URL主機名的調用函數

$ routeProvider是最好的方向去尋找這樣的東西嗎?它需要在網站範圍內,這就是爲什麼我認爲AngularJS routeProvider可能工作。我先問,因爲我是Angular的新手。我試圖避免必須識別每個點擊事件來監聽鏈接中的這個特定域名,因爲有很多地方,並且因爲正在使用CMS而發生更改。

謝謝!

+1

'$ routeProvider'只適用於「內部」應用程序路由('/#/ foo')。您可能需要監聽這些外部鏈接上的點擊事件。 –

+0

謝謝Sergui! 我試圖避免必須識別每個點擊事件以便在鏈接中監聽此特定域名的原因是,有很多地方,並且因爲正在使用CMS而發生更改。這就是爲什麼我希望使用$ routeProvider。當嘗試匹配主機名,然後調用一個匹配的函數。例如,如果點擊「adomainname.com」鏈接,我不需要重定向,只需調用一個函數即可。 由於您可以檢查路徑和參數字符串,不會路由提供者「查看」每個鏈接點擊站點嗎? 謝謝! – Scott

回答

0

使用$routeProvider您只能在同一個域和AngularJS上下文中定義路由。這是隱含的。因此,您只能在#符號(hashbang)之後「捕獲」的URL段。

正如我所說的,你可能需要做:

$(body).on('click', 'a', function(e) { 
    var url = $(this).attr('url'); 
    // now do something with url 
}); 

我使用jQuery爲了簡單和event delegation性能方面的原因。

請注意,如果鏈接更改當前頁面的URL,則此將不會工作。這意味着您正在導航到另一個頁面並銷燬當前JSR代碼正在運行的那個頁面,並且正在偵聽click事件。例如,如果您在鏈接上使用target="_blank",則此功能纔有效。

的一種方法,使其對外部和target="_self"環節的工作:

$(body).on('click', 'a', function(e) { 
    var url = $(this).attr('url'); 
    if(url === 'http://example.com/') { 
     e.preventDefault(); 
     // 1. do some stuff, even AJAX 
     // 2. after stuff completes: 
     window.location = url; 
    } 
}); 

這不幸意味着用戶必須等待任何在(1)之前,他實際上採取了新的URL發生。如果你正在做的事情很快(不到一秒鐘),或許隱藏在頁面上的所有東西都可以和e.preventDefault一起使用。

+0

好的,這很有道理,它只能捕捉路徑和參數。點擊事件將改變當前頁面的URL,所以這可能不起作用。 Pseudo:當在domain1上,並且請求轉到domain2時,調用一個函數,然後在同一個窗口中轉到domain2。 BTW:將被調用的函數將只加載domain2之前記錄的一些分析信息。這個分析包不會爲我們自動捕獲,不幸的是它必須被告知。 – Scott

+0

查看我更新的答案,瞭解處理此案例的方法。它使用'event.preventDefault'和'window.location'。 –

相關問題