2015-09-15 5 views
5

Я пытаюсь выделить выделенный элемент на панели навигации Bootstrap. Вот мой код:Bootstrap-highlight Active and Angular директива

<ul class="nav navbar-nav navbar-left" top-bar> 

и директива:

a.directive('topBar', function() { 
return { 
    restrict: 'AE', 
    link: function (scope, elem, attrs) { 
     $(elem).on("click", function() { 
      $(elem).find(".active").removeClass("active"); 
      $(this).parent().addClass("active"); 
     }); 
    } 
} 

});

Это работает, только если я удалю class = "nav navbar-nav navbar-left". В противном случае это не входит в директиву. Какие-либо предложения?

Thanks

ответ

1

Я предполагаю, что вы хотите слушать щелчки по элементам списка (тег li) в компоненте и обновлять свои классы. Попробуйте использовать event delegation - если вы используете JQuery, просто добавьте дополнительный селектор в on вызова:

a.directive('topBar', function() { 
    return { 
     restrict: 'AE', 
     link: function (scope, elem, attrs) { 
      elem.on("click", "li", function (e) { 
       elem.find(".active").removeClass("active"); 
       $(this).addClass("active"); 
      }); 
     } 
    }; 
}); 
+0

> Попробуйте использовать делегирование событий <Именно так! Спасибо! – Mark

0

используйте этот код. может быть, это поможет вам ...

app.directive('topBar', function() { 
    return { 
     restrict: 'AE', 
     link: function (scope, elem, attrs) { 
      $(elem).on("click", function() { 
      $(".active").removeClass("active"); 
      $(elem).addClass("active"); 

      }); 
     } 
    } 
}); 

see this link

+0

'$ (" активный")' настолько глобальна. Это удаляет все классы 'active' на странице –

+0

. '$ (elem) .parent(). Find (". Active "). RemoveClass (" active ");' – Sandeep