если я нажму на проект, «активный» не переместится в проект

0

JS

mainApp.controller("leftmenuController", function($scope, $http) {
    $scope.check = function(event) {
        $('li').removeClass('active');
        $(event.target).addClass('active');
    };
});

Html

<li class="active" ng-click="check($event)"><a href="#/firstpage">Link</a>
<li ng-click="check($event)"><a href="#/project"></a></li>

если я нажимаю на проект, "активные" не переходят в проект. что не так с моим кодом.

Изображение 174551

  • 0
    Ваш метод проверки вызывается в первую очередь?
  • 0
    использовать $(event.target.parentNode).addClass('active');
Показать ещё 1 комментарий
Теги:

3 ответа

5

что не так с моим кодом

Он не использовал угловую форму, чтобы использовать ее. Вы никогда не должны манипулировать DOM в контроллере. Контроллер должен только изменять модель, и в представлении должны использоваться угловые выражения и директивы для генерации HTML на основе этой модели.

Поэтому у вас должно быть что-то вроде

<li ng-class="{active: activeLink === 'first'}" ng-click="checkLink('first')" ...>

а также

<li ng-class="{active: activeLink === 'project'}" ng-click="checkLink('project')" ...>

И контроллер должен просто сделать

$scope.checkLink = function(link) {
    $scope.activeLink = link;
}
1

Попробуй это

    $scope.activeMenu = 'firstpage';
    $scope.check = function(menu) {
        $scope.activeMenu = menu;
    };

HTML

<li ng-class="{'active':activeMenu=='firstpage'}" ng-click="check('firstpage')"><a href="#/firstpage">Link</a>
<li ng-class="{'active':activeMenu=='project'}" ng-click="check('project')"><a href="#/project"></a></li>
0

вы можете сделать это без jquery

<li ng-class="setActive('#/firstpage')"><a href="#/firstpage">Link</a>

И в шаблоне

$scope.setActive= function (path) {
  return ($location.path().substr(0, path.length) === path) ? 'active' : '';
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню