Я использовал AngularJs-1.0.7 и Bootstrap в своем приложении. Недавно я перешел из AngularJs-1.0.7 в AngularJs-1.2. Я использую Bootstrap Accordions и Tabs.
Код HTML для вкладки содержит <a href="#id_for_content">
, как показано ниже.
<ul id="myTab" class="nav nav-tabs">
<li class="active"><a href="#firstTab" data-toggle="tab">Home</a></li>
<li><a href="#secondTab" data-toggle="tab">Profile</a></li>
</ul>
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade in active" id="firstTab">
<p>Content for first tab.</p>
</div>
<div class="tab-pane fade" id="secondTab">
<p>Content For second tab.</p>
</div>
</div>
В старых версиях Angular изменение маршрута происходит, только если мы даем якорный тег, например <a href="#/firstTab">
. Но AngularJs-1.2 перенаправляет <a href="#firstTab">
. Он не учитывает /
между #
и firstTab
. Следовательно, при нажатии на Tab он перенаправляется на http://web_url/#/firstTab
. Как решить эту проблему?
Мое решение
Я нашел решение для этой проблемы. Я написал директиву для тега. В этой директиве я проверил атрибут href. Если он соответствует, предотвращает его поведение по умолчанию. Проверьте следующий код.
app.directive('a', function() {
return {
restrict: 'E',
link: function(scope, elem, attrs) {
if(attrs.href === '#firstTab'|| attrs.href === '#secondTab'){
elem.on('click', function(e){
e.preventDefault();
});
}
}
};
});
Но проблема с этим методом заключается в том, что я должен проверять все идентификаторы табуляции или идентификаторы аккордеона здесь. Если я использую для них динамические идентификаторы, его невозможно проверить в директиве.
Если вы можете найти лучшее решение, дайте нам знать об этом.