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