2016-08-26 2 views
0

Я пытаюсь сделать все ссылки в модальном открытии на новой вкладке, и из-за ограничений использования углового манипулирования DOM не так просто, как Я думал, что так и будет. Есть ли способ привязать событие клика к ссылкам, а затем сделать это событие щелчка открыть новую вкладку?Bind click event, чтобы открыть ссылку на новой вкладке

У меня есть что-то вроде этого

w = angular.element($window) 
w.bind 'click', (e) -> 
    # if link clicked open link in new tab?  
+0

Я предполагаю, что это не угловая, кто может сделать это. Вы можете использовать пользовательские свойства 'HTML', чтобы исправить это. По умолчанию используйте 'target =" _ blank "' в тэге привязки. Все теги откроются на новой вкладке. – Vineet

ответ

0

Основное правило заключается в том, что если вы собираетесь сделать что-нибудь с DOM, то вы должны иметь директиву и использовать обычный JQuery в функцию связи

new-tab.directive.coffee

angular.module 'my.module' 
    .directive 'newTab', ($window) -> 
    restrict: 'A' 
    link: (scope, element, attributes) -> 
     element.on('click', (evt)-> 
     # Open link in new tab here 
    ) 

Пример:

<a href='/your/link' new-tab> 

Вам, вероятно, придется делать некоторые «запреты по умолчанию», чтобы ссылка не пошла на одну и ту же страницу в текущем окне (теперь я думаю об этом).

Вы также можете попробовать просто установить свойство _target = 'blank' на всех узлах.

Я не проверял это

new-tab-a.directive.coffee

angular.module 'my.module' 
    .directive 'a', -> #I doubt this is a good idea though using 'a' as a directive name. 
    restrict: 'E' 
    link: (scope, element, attributes) -> 
     attributes.target = '_blank' 
1

Может вы просто не использовать нг кнопкой мыши на каждой ссылке?

<a href="#" ng-click="openLink('http://www.google.com')">Open link in new window</a> 

И есть что-то вроде этого в контроллере:

$scope.openLink = (link) -> 
    window.open link 
    return 

Или, используя только HTML:

<a href="http://www.google.com" target="_blank">Open link in new window</a> 
+0

Просто пишите то же самое. Зачем изобретать колесо? – Luxor001

+0

Потому что тогда вы связываете DOM с контроллером, где каждый контроллер должен иметь этот метод или полагаться на наследование сферы, чтобы обеспечить его, и это обычно указывает на необходимость директивы. Мне нравится простая цель = '_ blank', это просто и работает! –