Як поводитися з анкерним хеш-з'єднанням в AngularJS


318

Хтось із вас знає, як красиво обробити анкерний хеш-зв'язок у AngularJS ?

У мене є така розмітка для простої сторінки поширених запитань

<a href="#faq-1">Question 1</a>
<a href="#faq-2">Question 2</a>
<a href="#faq-3">Question 3</a>

<h3 id="faq-1">Question 1</h3>
<h3 id="faq-2">Question 2</h3>
<h3 id="fa1-3">Question 3</h3>

При натисканні на будь-яке з перерахованих вище посилань AngularJS перехоплює і спрямовує мене на зовсім іншу сторінку (в моєму випадку 404-сторінку, оскільки немає маршрутів, що відповідають посиланням.)

Моя перша думка полягала в тому, щоб створити відповідність маршруту " / faq /: Chapter " і у відповідному контролері перевірити $routeParams.chapterвідповідний елемент, а потім використовувати jQuery для прокручування вниз до нього.

Але потім AngularJS знову впивається в мене і все одно просто прокручується вгору сторінки.

Отже, хтось тут робив щось подібне в минулому і знає добре рішення?

Редагувати: Перехід на html5Mode повинен вирішити мої проблеми, але ми все одно повинні підтримувати IE8 + так чи інакше, боюся, це не прийняте рішення: /


Я думаю, що кутовий пропонує ng-href=""замість цього використовувати .
скарбничка

10
Я думаю, що ng-href застосовна лише у тому випадку, якщо URL містить динамічні дані, які потрібно прив’язати до ng-моделі. Мені цікаво, якщо ви призначите хешпрефіксації locationProvider, якщо він ігнорує посилання на ідентифікатори: docs.angularjs.org/guide/dev_guide.services.$location
Адам

Адам правильний у використанні ng-href.
Расмус


Це також є проблема для нового кутового: stackoverflow.com/questions/36101756 / ...
phil294

Відповіді:


375

Ви шукаєте $anchorScroll().

Ось (шалена) документація.

І ось джерело.

В основному ви просто вводите його і називаєте його у своєму контролері, і він прокрутить вас до будь-якого елемента з ідентифікатором, знайденим у $location.hash()

app.controller('TestCtrl', function($scope, $location, $anchorScroll) {
   $scope.scrollTo = function(id) {
      $location.hash(id);
      $anchorScroll();
   }
});

<a ng-click="scrollTo('foo')">Foo</a>

<div id="foo">Here you are</div>

Ось планкер для демонстрації

EDIT: використовувати це для маршрутизації

Налаштуйте свою кутову маршрутизацію як зазвичай, а потім просто додайте наступний код.

app.run(function($rootScope, $location, $anchorScroll, $routeParams) {
  //when the route is changed scroll to the proper element.
  $rootScope.$on('$routeChangeSuccess', function(newRoute, oldRoute) {
    $location.hash($routeParams.scrollTo);
    $anchorScroll();  
  });
});

і ваше посилання виглядатиме так:

<a href="#/test?scrollTo=foo">Test/Foo</a>

Ось Plunker, що демонструє прокрутку маршрутизацією та $ anchorScroll

І навіть простіше:

app.run(function($rootScope, $location, $anchorScroll) {
  //when the route is changed scroll to the proper element.
  $rootScope.$on('$routeChangeSuccess', function(newRoute, oldRoute) {
    if($location.hash()) $anchorScroll();  
  });
});

і ваше посилання виглядатиме так:

<a href="#/test#foo">Test/Foo</a>

5
Проблема може виникнути при додаванні маршрутизації: якщо додати ngView кожна зміна хеша URL-адреси призведе до перезавантаження маршруту ... У вашому прикладі немає маршрутизації, а URL-адреса не відображає поточний елемент ... Але дякую за вказівку на $ anchorScroll
Валентин Шибанов

1
@blesh, виклик location.hash (X) змінює сторінку, оскільки маршрутизація контролює перегляди.
dsldsl

24
Це рішення призводить до повторного відображення всієї моєї програми.

2
@dsldsl && @OliverJosephAsh: $ location.hash () не перезавантажить сторінку. Якщо це так, відбувається щось інше. Ось такий самий планк із часом, який виписується під час завантаження сторінки, ви побачите, що вона не змінюється. Якщо ви хочете прокрутити тег прив’язки на поточній сторінці, не завантажуючи маршрут, ви просто зробите регулярне посилання <a href="#foo">foo</a>. Мій зразок коду повинен був показувати прокрутку до ідентифікатора на routechange.
Бен Леш

4
@blesh: Я рекомендую вам також видалити хеш після прокрутки до потрібного розділу, таким чином URL-адреса не забруднена речами, яких там дійсно не повинно бути. Скористайтеся цим: $location.search('scrollTo', null)
кумархарш

168

У моєму випадку я помітив, що логіка маршрутизації починається, якщо я змінюю $location.hash(). Наступна хитрість спрацювала ..

$scope.scrollTo = function(id) {
    var old = $location.hash();
    $location.hash(id);
    $anchorScroll();
    //reset to old to keep any additional routing logic from kicking in
    $location.hash(old);
};

5
Блискуче дякую за це, логіка маршрутизації абсолютно відмовилася вести себе навіть під час використання рішення .run (...) @ blesh, і це сортує це.
ljs

8
Ваш трюк "збереження старого хешу" став абсолютним рятувальником. Це запобігає перезавантаженню сторінки, зберігаючи чистий маршрут. Дивовижна ідея!
ЦеLanham

2
Хороший. Але після реалізації вашого рішення URL не оновлює значення цільового ідентифікатора.
Мохамед Хуссейн

1
У мене був такий самий досвід, як і Мохамед ... Це дійсно зупинило перезавантаження, але воно відображає безшляхетний маршрут (і $ anchorScroll не мав ефекту). 1.2.6 Гммм.
Майкл

3
Я використовую $location.hash(my_id); $anchorScroll; $location.hash(null). Це запобігає перезавантаженню, і мені не потрібно керувати oldзмінною.
MFB

53

Немає необхідності змінювати маршрутизацію або щось інше, просто потрібно використовувати target="_self"для створення посилань

Приклад:

<a href="#faq-1" target="_self">Question 1</a>
<a href="#faq-2" target="_self">Question 2</a>
<a href="#faq-3" target="_self">Question 3</a>

І використовуйте idатрибут у своїх елементах html, як це:

<h3 id="faq-1">Question 1</h3>
<h3 id="faq-2">Question 2</h3>
<h3 id="faq-3">Question 3</h3>

Не потрібно використовувати ## як вказано / згадується в коментарях ;-)


1
Це не працює для мене, але рішення тут зробив: stackoverflow.com/a/19367249/633107
Splaktar

6
Дякую за це рішення. Але target = "_ self" є достатнім. Не потрібно подвоювати #
Christophe P

5
target = "_ self" - це, безумовно, найкраща відповідь (не потрібно подвоювати #, як вказував Крістоф П). Це працює незалежно від того, увімкнено або вимкнено Html5Mode.
новачок

3
Просто і повно. Працював для мене, не потребуючи додавання ще однієї кутової залежності.
адеади

4
Це правильне рішення. Не потрібно залучати кутову службу $ anchorScroll. Дивіться документацію для тегу: https://developer.mozilla.org/en/docs/Web/HTML/Element/a
Yiling

41
<a href="##faq-1">Question 1</a>
<a href="##faq-2">Question 2</a>
<a href="##faq-3">Question 3</a>

<h3 id="faq-1">Question 1</h3>
<h3 id="faq-2">Question 2</h3>
<h3 id="faq-3">Question 3</h3>

Дивовижно! На сьогодні найпростіше рішення, але будь-яка ідея, як пов’язати якір на окремій сторінці? (тобто / товари # книги)
8bithero

Я думаю, це те саме, що рішення (/ товари ## книги) в AngularJS
lincolnge

1
З мого досвіду, href = "##" працює лише тоді, коли $ anchorScroll вводиться.
Брайан Парк

9
це здається відносно простим, але його не працює :-(
brykneval

4
Я додав target = "_ self", і це спрацювало як шарм для всіх типів навігації в межах сторінки (читайте повзунки, переходячи до різних розділів тощо). Дякуємо, що поділилися цим чудовим і найпростішим трюком.
Кумар Нітеш

19

Якщо ви завжди знаєте маршрут, ви можете просто додати якір таким чином:

href="#/route#anchorID

де routeпоточний кутовий маршрут і anchorIDвідповідає <a id="anchorID">десь на сторінці


1
Це запускає нормальну зміну маршруту AngularJS і тому не рекомендується. У моєму випадку це було дуже наочно, оскільки відео YouTube на сторінці поширених запитань / довідки перезавантажувались.
Робін Андерссон

9
@ RobinWassén-Andersson, вказавши reloadOnSearch: falseдля цього маршруту в конфігурації ваших маршрутів, кутовий не призведе до зміни маршруту і просто прокрутить до ідентифікатора. У поєднанні з повним маршрутом, зазначеним у aтезі, я б сказав, що це найпростіше і найпростіше рішення.
Еліза

Дякую. Це мені допомогло. Я не використовую жодних користувацьких маршрутів у своєму додатку, тому велика робота href = "# / # anchor-name" працювала чудово!
Йордан

14

$anchorScroll працює для цього, але є набагато кращий спосіб використовувати його в новіших версіях Angular.

Тепер, $anchorScrollприймає хеш як необов'язковий аргумент, тому вам зовсім не доведеться змінювати $location.hash. ( документація )

Це найкраще рішення, оскільки воно зовсім не впливає на маршрут. Я не зміг працювати жодне з інших рішень, тому що я використовую ngRoute, і маршрут перезавантажиться, як тільки я встановлю $location.hash(id), перед цим$anchorScroll зробити свою магію.

Ось як його використовувати ... по-перше, в директиві чи контролері:

$scope.scrollTo = function (id) {
  $anchorScroll(id);  
}

а потім у вигляді:

<a href="" ng-click="scrollTo(id)">Text</a>

Крім того, якщо вам потрібно врахувати фіксований навбар (або інший інтерфейс), ви можете встановити зміщення для $ anchorScroll так (у функції запуску основного модуля):

.run(function ($anchorScroll) {
   //this will make anchorScroll scroll to the div minus 50px
   $anchorScroll.yOffset = 50;
});

Дякую. Як би ви реалізували свою стратегію щодо хеш-посилання в поєднанні зі зміною маршруту? Приклад: натисніть цей елемент навігації, який відкриє інший вигляд і прокручується до конкретного idв цьому поданні.
Кайл Васселла

Вибачте, щоб домовитись. Якщо у вас є шанс, ви могли б поглянути на моє питання про Стек? Я відчуваю, що ваша відповідь тут наблизила мене так близько, але я просто не можу її здійснити: stackoverflow.com/questions/41494330/… . Я теж використовую ngRouteі новішу версію Angular.
Kyle Vassella

Вибачте, я не пробував цього конкретного випадку ... але ви подивилися на $ location.search () або $ routeParams ? Можливо, ви могли б використовувати те чи інше для ініціалізації вашого контролера - якщо ваш список прокруткиДля параметра пошуку в URL-адресі, то контролер може використовувати $ anchorScroll як вище для прокрутки сторінки.
Ребекка

2
Передавши Id безпосередньо на $ anchorScroll, мої маршрути змінилися з чогось на кшталт / contact # contact на just / contact. Це має бути прийнятою відповіддю.
RandomUs1r

12

Це було моє рішення з використанням директиви, яка здається більш угловою-у, оскільки ми маємо справу з DOM:

Plnkr тут

github

КОД

angular.module('app', [])
.directive('scrollTo', function ($location, $anchorScroll) {
  return function(scope, element, attrs) {

    element.bind('click', function(event) {
        event.stopPropagation();
        var off = scope.$on('$locationChangeStart', function(ev) {
            off();
            ev.preventDefault();
        });
        var location = attrs.scrollTo;
        $location.hash(location);
        $anchorScroll();
    });

  };
});

HTML

<ul>
  <li><a href="" scroll-to="section1">Section 1</a></li>
  <li><a href="" scroll-to="section2">Section 2</a></li>
</ul>

<h1 id="section1">Hi, I'm section 1</h1>
<p>
Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. 
 Summus brains sit​​, morbo vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. 
Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. 
Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.
</p>

<h1 id="section2">I'm totally section 2</h1>
<p>
Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. 
 Summus brains sit​​, morbo vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. 
Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. 
Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.
</p>

Я скористався послугою $ anchorScroll. Щоб протидіяти оновленню сторінки, яке відбувається разом із зміною хешу, я пішов і скасував подію locationChangeStart. Це працювало для мене, оскільки у мене була сторінка довідки, підключена до ng-перемикача, і оновлення суттєво зламає додаток.


Мені подобається ваше директивне рішення. Однак як би це зробити, ви хотіли завантажити іншу сторінку і прокрутити до місця прив’язки одночасно. Без angularjs це номінально було б href = "location # hash". Але ваша директива заважає перезавантажувати сторінку.
CMCDragonkai

@CMCDragonkai з моєю директивою, я не впевнений, тому що я використовую виклик до $ anchorScroll, який, схоже, лише обробляє прокрутку до елемента, який зараз знаходиться на сторінці. Можливо, вам доведеться возитися з $ location або $ window, щоб отримати щось, пов’язане зі зміною сторінки.
ХалилРаванна

2
Вам потрібно відписати подію locationChangeStart: var off = obseg. $ On ('$ locationChangeStart', функція (ev) {off (); ev.preventDefault ();});

Хороший улов @EugeneTskhovrebov, я пішов і додав це до відповіді в редакції.
ХалилРаванна

5

Спробуйте встановити хеш-префікс для кутових маршрутів $locationProvider.hashPrefix('!')

Повний приклад:

angular.module('app', [])
  .config(['$routeProvider', '$locationProvider', 
    function($routeProvider, $locationProvider){
      $routeProvider.when( ... );
      $locationProvider.hashPrefix('!');
    }
  ])

Це не впливає на результат. Було б солодко, хоча.
Расмус

2
Ти впевнений. Чому це не працює? Якщо префікс хеша є !, то маршрутизація хеша повинна бути #! Сторінкою. Тому AngularJS повинен виявити, коли це просто #hash, він повинен автоматично прив’язувати прокрутку та працювати як для URL-адрес режиму HTML5, так і для URL-адрес хеш-режиму.
CMCDragonkai

5

Я обійшов це в логіці маршруту для свого додатка.

function config($routeProvider) {
  $routeProvider
    .when('/', {
      templateUrl: '/partials/search.html',
      controller: 'ctrlMain'
    })
    .otherwise({
      // Angular interferes with anchor links, so this function preserves the
      // requested hash while still invoking the default route.
      redirectTo: function() {
        // Strips the leading '#/' from the current hash value.
        var hash = '#' + window.location.hash.replace(/^#\//g, '');
        window.location.hash = hash;
        return '/' + hash;
      }
    });
}

1
Це не працює: Помилка: [$ injector: modulerr] Не вдалося встановити кут модуля через: Помилка: недійсний 'обробник' у, коли ()
геодезичний

5

Це стара публікація, але я довго проводив дослідження різних рішень, тому хотів поділитися ще одним простим. Просто додавання target="_self"до <a>тегу виправило це для мене. Посилання працює і переносить мене до потрібного місця на сторінці.

Однак Angular все-таки вводить деяку дивацтво з # в URL-адресі, так що ви можете зіткнутися з проблемою за допомогою кнопки "Назад" для навігації та іншого після використання цього методу.


4

Це може бути новий атрибут для ngView, але я зміг змусити його прив’язувати хеш-посилання для роботи з angular-routeвикористанням ngView autoscrollатрибута та "подвійних хешей".

ngView (див. автоматичне прокручування)

(Наступний код використовувався з кутовим ремінцем)

<!-- use the autoscroll attribute to scroll to hash on $viewContentLoaded -->    
<div ng-view="" autoscroll></div>

<!-- A.href link for bs-scrollspy from angular-strap -->
<!-- A.ngHref for autoscroll on current route without a location change -->
<ul class="nav bs-sidenav">
  <li data-target="#main-html5"><a href="#main-html5" ng-href="##main-html5">HTML5</a></li>
  <li data-target="#main-angular"><a href="#main-angular" ng-href="##main-angular" >Angular</a></li>
  <li data-target="#main-karma"><a href="#main-karma" ng-href="##main-karma">Karma</a></li>
</ul>


2

Ось такий брудний спосіб вирішення, створивши власну директиву, яка прокручує вказаний елемент (із твердо кодованим "faq")

app.directive('h3', function($routeParams) {
  return {
    restrict: 'E',
    link: function(scope, element, attrs){        
        if ('faq'+$routeParams.v == attrs.id) {
          setTimeout(function() {
             window.scrollTo(0, element[0].offsetTop);
          },1);        
        }
    }
  };
});

http://plnkr.co/edit/Po37JFeP5IsNoz5ZycFs?p=preview


Це справді працює, але це, як ви сказали, брудно. Дуже брудний. Подивимось, чи може хтось інший придумати гарне рішення, чи мені доведеться з цим піти.
Расмус

Кутовий вже має функцію прокруткиЗа вбудованого функціоналу прокрутки $anchorScrollдив. Мою відповідь.
Бен Леш

Змінено plunker, щоб бути менш брудним: він використовує $ location.path (), тому в джерелі немає жорсткого коду "faq". А також намагався використовувати $ anchorScroll, але, здається, через маршрутизацію не виходить ...
Валентин Шибанов

2
<a href="/#/#faq-1">Question 1</a>
<a href="/#/#faq-2">Question 2</a>
<a href="/#/#faq-3">Question 3</a>

2

Якщо вам не подобається використовувати ng-clickось альтернативне рішення. Він використовує a filterдля створення правильного URL-адреси на основі поточного стану. Мій приклад використовує ui.router .

Перевага полягає в тому, що користувач побачить, де посилання переходить на курсор.

<a href="{{ 'my-element-id' | anchor }}">My element</a>

Фільтр:

.filter('anchor', ['$state', function($state) {
    return function(id) {
        return '/#' + $state.current.url + '#' + id;
    };
}])

2

Моє рішення з ng-route була такою простою директивою:

   app.directive('scrollto',
       function ($anchorScroll,$location) {
            return {
                link: function (scope, element, attrs) {
                    element.click(function (e) {
                        e.preventDefault();
                        $location.hash(attrs["scrollto"]);
                        $anchorScroll();
                    });
                }
            };
    })

Html виглядає так:

<a href="" scrollTo="yourid">link</a>

Чи не потрібно було б вказувати такий атрибут, як scroll-to="yourid"і називати директиву scrollTo(і отримувати доступ до атрибуту як attrs["scrollTo"]? Крім того, без експліцитного включення jQuery з цим обробником має бути пов'язаний element.on('click', function (e) {..}).
Theodros Zelleke

1

Ви можете спробувати використати anchorScroll .

Приклад

Отже, контролером буде:

app.controller('MainCtrl', function($scope, $location, $anchorScroll, $routeParams) {
  $scope.scrollTo = function(id) {
     $location.hash(id);
     $anchorScroll();
  }
});

І вид:

<a href="" ng-click="scrollTo('foo')">Scroll to #foo</a>

... і немає секрету для ідентифікатора якоря:

<div id="foo">
  This is #foo
</div>

1

Я намагався зробити так, щоб мій додаток Angular прокручувався до опорного завантаження і наштовхувався на правила перезапису URL-адреси $ routeProvider.

Після довгих експериментів я зупинився на цьому:

  1. зареєструйте обробник подій document.onload події з розділу .run () модуля Angular app.
  2. в обробнику з’ясуйте, яким повинен був бути оригінал тега прив’язки, виконуючи деякі рядкові операції.
  3. замініть location.hash за допомогою зніманого тега прив’язки (що змушує $ routeProvider негайно перезаписати його знову за допомогою правила "# /". Але це добре, тому що Angular тепер синхронізується з тим, що відбувається в URL 4) $ anchorScroll ().

angular.module("bla",[]).}])
.run(function($location, $anchorScroll){
         $(document).ready(function() {
	 if(location.hash && location.hash.length>=1)    		{
			var path = location.hash;
			var potentialAnchor = path.substring(path.lastIndexOf("/")+1);
			if ($("#" + potentialAnchor).length > 0) {   // make sure this hashtag exists in the doc.                          
			    location.hash = potentialAnchor;
			    $anchorScroll();
			}
		}	 
 });


1

Я не на 100% впевнений, що це працює весь час, але в моєму застосуванні це дає мені очікувану поведінку.

Скажімо, ви знаходитесь на сторінці ПРО ПРОГРАМУ та маєте такий маршрут:

yourApp.config(['$routeProvider', 
    function($routeProvider) {
        $routeProvider.
            when('/about', {
                templateUrl: 'about.html',
                controller: 'AboutCtrl'
            }).
            otherwise({
                redirectTo: '/'
            });
        }
]);

Тепер у вас HTML

<ul>
    <li><a href="#/about#tab1">First Part</a></li>
    <li><a href="#/about#tab2">Second Part</a></li>
    <li><a href="#/about#tab3">Third Part</a></li>                      
</ul>

<div id="tab1">1</div>
<div id="tab2">2</div>
<div id="tab3">3</div>

На закінчення

Включаючи назву сторінки до того, як якір зробив для мене трюк. Дайте мені знати про ваші думки.

Нижня частина

Це відновить сторінку, а потім прокрутіть до якоря.

ОНОВЛЕННЯ

Кращий спосіб - додати наступне:

<a href="#tab1" onclick="return false;">First Part</a>

1

Отримайте свою функцію прокрутки легко. Він також підтримує анімаційну / плавну прокрутку як додаткову функцію. Деталі для бібліотеки кутової прокрутки :

Github - https://github.com/oblador/angular-scroll

Чаша :bower install --save angular-scroll

npm :npm install --save angular-scroll

Мінімізована версія - всього 9кб

Плавне прокручування (анімована прокрутка) - так

Прокрутіть шпигуна - так

Документація - відмінна

Демо - http://oblador.github.io/angular-scroll/

Сподіваюсь, це допомагає.


1

На основі @Stoyan я придумав таке рішення:

app.run(function($location, $anchorScroll){
    var uri = window.location.href;

    if(uri.length >= 4){

        var parts = uri.split('#!#');
        if(parts.length > 1){
            var anchor = parts[parts.length -1];
            $location.hash(anchor);
            $anchorScroll();
        }
    }
});

0

Під час зміни маршруту він буде прокручуватися вгору сторінки.

 $scope.$on('$routeChangeSuccess', function () {
      window.scrollTo(0, 0);
  });

покладіть цей код на свій контролер.


0

У моїй думці це було @slugslog, але я змінив би одне. Я б замість цього застосував заміну, тому вам не доведеться її встановлювати назад.

$scope.scrollTo = function(id) {
    var old = $location.hash();
    $location.hash(id).replace();
    $anchorScroll();
};

Документи шукають "Замінити метод"


0

Жодне з наведених вище рішень для мене не працює, але я просто спробував це, і воно спрацювало,

<a href="#/#faq-1">Question 1</a>

Тож я зрозумів, що потрібно повідомити сторінку, щоб почати з індексної сторінки, а потім використати традиційний якір.


0

Іноді в програмі angularjs хеш-навігація не працює, і бібліотеки jquery jaquery jaquery широко використовують цей тип навігації, щоб змусити її працювати додавати target="_self"тег прив’язки. напр<a data-toggle="tab" href="#id_of_div_to_navigate" target="_self">


0

Дивіться https://code.angularjs.org/1.4.10/docs/api/ngRoute/provider/ $ routeProvider

[reloadOnSearch = true] - {boolean =} - перезавантажити маршрут, коли змінюються лише $ location.search () або $ location.hash ().

Встановлення цього значення неправдиво зробило трюк без усього вищезазначеного для мене.


0

Я використовую AngularJS 1.3.15 і, схоже, мені нічого особливого не потрібно робити.

https://code.angularjs.org/1.3.15/docs/api/ng/provider/ $ anchorScrollProvider

Отже, у моєму html працює наступне:

<ul>
  <li ng-repeat="page in pages"><a ng-href="#{{'id-'+id}}">{{id}}</a>
  </li>
</ul>
<div ng-attr-id="{{'id-'+id}}" </div>

Мені взагалі не довелося вносити жодних змін до свого контролера чи JavaScript.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.