Javascript 基于匹配URL主机名的AngularJS路由调用函数

Javascript 基于匹配URL主机名的AngularJS路由调用函数,javascript,angularjs,Javascript,Angularjs,使用AnguarJS,我希望在当前网站中单击的链接中存在特定主机名时调用函数。用户将继续单击链接,但函数将在后台调用 $routeProvider是这样做的最佳方向吗?它需要站点范围,所以我认为AngularJS routeProvider可能会工作。我先问是因为我是新手。我试图避免识别每个点击事件来监听链接中的这个特定域名,因为有太多的地方,它们会因为使用CMS而改变 谢谢 使用$routeProvider您只能在同一域上和AngularJS上下文中定义路由。这是含蓄的。因此,您只能在#符号(

使用AnguarJS,我希望在当前网站中单击的链接中存在特定主机名时调用函数。用户将继续单击链接,但函数将在后台调用

$routeProvider是这样做的最佳方向吗?它需要站点范围,所以我认为AngularJS routeProvider可能会工作。我先问是因为我是新手。我试图避免识别每个点击事件来监听链接中的这个特定域名,因为有太多的地方,它们会因为使用CMS而改变


谢谢

使用
$routeProvider
您只能在同一域上和AngularJS上下文中定义路由。这是含蓄的。因此,您只能在
#
符号(hashbang)之后“捕获”URL段

正如我所说,您可能需要这样做:

$(body).on('click', 'a', function(e) {
    var url = $(this).attr('url');
    // now do something with url 
});
出于简单性和性能原因,我使用jQuery

请注意,如果链接更改当前页面的URL,这将不起作用。这意味着您正在导航到另一个页面并销毁当前页面,该JS代码正在运行的页面并侦听
单击
事件。例如,仅当您在链接上使用
target=“\u blank”
时,此功能才起作用

使其适用于外部和
target=“\u 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
隐藏页面上所有可见的内容就足够了。

使用
$routeProvider
你只能在同一个域和AngularJS上下文中定义路由。这是含蓄的。因此,您只能在
#
符号(hashbang)之后“捕获”URL段

正如我所说,您可能需要这样做:

$(body).on('click', 'a', function(e) {
    var url = $(this).attr('url');
    // now do something with url 
});
出于简单性和性能原因,我使用jQuery

请注意,如果链接更改当前页面的URL,这将不起作用。这意味着您正在导航到另一个页面并销毁当前页面,该JS代码正在运行的页面并侦听
单击
事件。例如,仅当您在链接上使用
target=“\u blank”
时,此功能才起作用

使其适用于外部和
target=“\u 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
隐藏页面上所有可见的内容就足够了。

$routeProvider
仅适用于“内部”应用程序路由(
/#/foo
)。您可能需要监听这些外部链接上的点击事件。谢谢Sergui!我之所以试图避免识别每个点击事件来监听链接中的特定域名,是因为有太多的地方,它们会因为使用CMS而改变。这就是我希望使用$routeProvider的原因。当尝试匹配主机名时,如果匹配就调用函数。我不需要重定向,只要在点击“adomainname.com”链接时调用函数即可。routeprovider是否“看到”了站点上的每个链接,因为您可以检查它的路径和参数字符串?谢谢大家!
$routeProvider
仅适用于“内部”应用程序路由(
/#/foo
)。您可能需要监听这些外部链接上的点击事件。谢谢Sergui!我之所以试图避免识别每个点击事件来监听链接中的特定域名,是因为有太多的地方,它们会因为使用CMS而改变。这就是我希望使用$routeProvider的原因。当尝试匹配主机名时,如果匹配就调用函数。我不需要重定向,只要在点击“adomainname.com”链接时调用函数即可。routeprovider是否“看到”了站点上的每个链接,因为您可以检查它的路径和参数字符串?谢谢大家!
$routeProvider
仅适用于“内部”应用程序路由(
/#/foo
)。您可能需要监听这些外部链接上的点击事件。谢谢Sergui!我之所以试图避免识别每个点击事件来监听链接中的特定域名,是因为有太多的地方,它们会因为使用CMS而改变。这就是我希望使用$routeProvider的原因。当尝试匹配主机名时,如果匹配就调用函数。我不需要重定向,只要在点击“adomainname.com”链接时调用函数即可。routeprovider是否“看到”了站点上的每个链接,因为您可以检查它的路径和参数字符串?非常感谢。啊,好吧,这很有道理,它只捕获路径和参数。单击事件将更改当前页面的URL,因此这可能不起作用。Pseudo:当在domain1上请求转到domain2时,调用一个函数,然后在同一窗口中转到domain2。顺便说一句:将被调用的函数只是在加载domain2之前记录一些分析信息。这个分析软件包不会自动为我们捕获这些信息,不幸的是,它必须被告知。请参阅我的更新答案以了解处理此案例的方法。它使用
event.preventDefault
window.location
。啊,好吧,这很有意义,因为它只捕获路径和参数。单击事件将更改当前页面的URL,因此这可能不起作用。Pseudo:当在domain1上请求转到domain2时,调用一个函数,然后在同一窗口中转到domain2。顺便说一句:将被调用的函数只是在加载domain2之前记录一些分析信息。这个分析仪