AngularJS路由 - 基于匹配URL主机名

时间:2015-06-03 13:27:29

标签: javascript angularjs

使用AnguarJS,我想在当前网站点击的链接中存在特定主机名时随时调用函数。用户将继续点击链接,但该功能将在后台调用。

$ routeProvider是最好的方向吗?它需要在整个网站范围内,这就是我认为AngularJS routeProvider可能工作的原因。我先问,因为我是Angular的新手。我试图避免必须识别每个点击事件以在链接中侦听此特定域名,因为有太多的地方,并且它们会因为正在使用CMS而更改。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用$routeProvider,您只能在同一域和AngularJS上下文中定义路由。那是隐含的。所以你只能"捕获" #符号(hashbang)之后的网址

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

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

为了简单起见我使用jQuery,出于性能原因使用event delegation

请注意,如果链接更改了当前页面的网址,则不会工作。这意味着您正在导航到另一个页面并销毁当前的一个页面,即运行此JS代码并监听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)发生的任何事情才能真正进入新网址。如果您正在做的事情很快(不到一秒钟),也许隐藏在页面上可见的所有内容以及e.preventDefault就足够了。