2015-06-03 2 views
1

Использование AnguarJS, я хотел бы вызвать функцию в любое время, когда определенное имя хоста существует в ссылке, нажатой на текущем веб-сайте. Пользователь будет продолжать использовать ссылку, но функция будет вызвана в фоновом режиме.AngularJS routing - функция вызова на основе совпадения URL-адреса хоста

Является ли $ routeProvider лучшим направлением, чтобы возглавить что-то вроде этого? Он должен быть узкополосным, поэтому я думал, что метод AngularJS routeProvider может работать. Сначала я спрашиваю, потому что я новичок в Angular. Я пытаюсь избежать необходимости идентифицировать каждое событие клика, чтобы прослушивать это конкретное доменное имя в ссылке, что существует так много мест, и они меняются, потому что используется CMS.

спасибо !!

+1

'$ routeProvider' работает только для« внутренних »маршрутов приложений ('/#/foo'). Вероятно, вам необходимо прослушать события кликов по этим внешним ссылкам. –

+0

Спасибо Сергуи! Причина, по которой я пытаюсь избежать идентификации каждого события клика, чтобы прослушивать это конкретное доменное имя в ссылке, заключается в том, что существует так много мест, и они меняются, потому что используется CMS. Вот почему я надеялся использовать $ routeProvider. Если попытаться совместить имя хоста, тогда вызовите функцию, если она соответствует. Мне не нужно перенаправлять, просто для вызова функции, если ссылка нажата на «adomainname.com», например. Не рутифицируйте «см.» Каждую ссылку, нажмите на сайт, чтобы вы могли проверить его для строк пути и параметров? Спасибо! – Scott

ответ

0

С помощью $routeProvider вы можете определять маршруты только в том же домене и только в контексте AngularJS. Это подразумевается. Таким образом, вы можете «захватить» URL-сегменты после# знак (hashbang).

Как я уже говорил, вам, вероятно, нужно сделать это:

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

Я использую JQuery для простоты и event delegation соображений производительности.

Обратите внимание, что это не будет работать, если ссылки меняют URL-адрес текущей страницы. Это означает, что вы переходите на другую страницу и уничтожаете текущий, тот, где работает этот 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), прежде чем он на самом деле взят на новый URL. Возможно, скрывать все видимое на странице вместе с e.preventDefault достаточно, если что бы вы ни делали быстро (менее одной секунды).

+0

О, хорошо, что он только захватывает путь и параметры. События кликов изменят URL-адрес текущей страницы, чтобы это не помогло. Pseudo: Когда на домене 1 и сделан запрос на переход в домен2, вызовите функцию, затем перейдите в домен 2 в том же окне. BTW: Функция, которая будет вызываться, будет просто записывать некоторую информацию аналитики перед загрузкой domain2. Этот пакет аналитики не будет автоматически фиксировать это для нас, к сожалению, это нужно сказать. – Scott

+0

См. Мой обновленный ответ для способа обработки этого случая. Он использует 'event.preventDefault' и' window.location'. –

Смежные вопросы