Внешние ссылки в приложении Angular

Я нахожусь в процессе включения Angular в одну страницу существующего приложения rails.

Все отлично работает с маршрутизацией на странице, используя следующие

app.config(function($routeProvider, $locationProvider) {
    $routeProvider
      .when('/services/:id', {
        templateUrl: "/javascripts/angular/templates/service_ui/service.html",
        controller: "ServiceCtrl"
     })

     $locationProvider.html5Mode(true);
});

Однако я хотел бы сохранить нормальную функциональность для ссылок, не связанных с Angular. Например, у нас есть ряд ссылок в заголовке, которые ссылаются в другом месте, которые теперь перехватываются маршрутизатором angular.

Я нашел несколько возможных решений по адресу: https://groups.google.com/forum/?fromgroups#!topic/angular/basidvjscRk

Но метод базового пути, похоже, не работает... и метод target="_self" довольно навязчив. Есть ли лучший способ позволить angular игнорировать маршруты, которые не указаны в функции конфигурации?

Я знаю, что есть метод .otherwise(), но опять же это похоже на взлом. Я что-то пропустил?

Большое спасибо!


person Nader Hendawi    schedule 26.05.2013    source источник
comment
Я думаю, что ответ Google Groups довольно солидный. Метод target="_self" кажется определенно в духе Angular, поскольку это декларативный подход к проблеме.   -  person Langdon    schedule 26.05.2013
comment
Возможный дубликат: stackoverflow.com/questions/13023338/   -  person Martin    schedule 26.05.2013
comment
target=_self, по-видимому, вызывает полную перезагрузку страницы при использовании Angular в сочетании с турбоссылками (для страниц того же сайта).   -  person dps    schedule 30.12.2014
comment
Возможный дубликат обычных ссылок Angularjs с html5Mode   -  person Derek Greer    schedule 07.01.2016


Ответы (2)


У нас есть относительно «традиционное» веб-приложение, в котором большинство ссылок вызывают полную перезагрузку страницы; через систему маршрутизации Angular проходит очень мало ссылок. Сразу после определения нашего модуля у нас есть следующее:

app.run(function($location, $rootElement) {
  $rootElement.off('click');
});

Это останавливает встроенный перехват кликов. который Angular использует для управления URL-адресом и т. д., когда вы нажимаете на ссылку; загвоздка в том, что теперь вам нужно использовать $location вручную всякий раз, когда вы хотите, чтобы Angular выполнил свою магию URL (например, с помощью ngClick и функции, которая соответствующим образом манипулирует $location).

Вы можете рассмотреть возможность использования $rootElement.off в сочетании со специальной директивой или функцией конфигурации, которая переустанавливает это поведение для ссылок, которые, как вы обнаруживаете, содержат определенный фрагмент URL.

person Michelle Tilley    schedule 26.05.2013
comment
Я искал это. Спасибо. - person dps; 30.12.2014

Другой вариант, который может сработать для вас, — изменить $rootElement: перехват ссылки происходит только внутри элемента, объявленного как ng-app.

В моем случае я переключился с <body ng-app="myApp"> на <section id="my-rich-area" ng-app="myApp">.

Это сработало для меня, так как у меня не было ссылок на тот же домен, не угловых, в этом разделе, ymmv.

person clov3rly    schedule 14.10.2015