Директива AngularJS не запускается - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь создать свою собственную директиву, чтобы выделить выбранное меню (я знаю, что это можно сделать с помощью ui-sref и ui-sref-active, но мне нужно расширить мою директиву чуть позже).

Я не могу заставить элемент вызвать директиву. Я хочу иметь возможность изменить цвет выбранного меню, но оно даже не запускает его с самого начала. Я не понимаю, что я делаю неправильно ...

angular.module('app', ['ui.router'])

.config(function($stateProvider) {
  $stateProvider
    .state('home', {
      template: '<h2>HOME</h2>'
    })
    
    .state('about', {
      template: '<h2>ABOUT</h2>'
    })
    
    .state('contact', {
      template: '<h2>CONTACT</h2>'
    });
})

.directive('isMenuActive', ['$state', function($state) {
  return {
    restrict: 'A',
    scope: {
      matches: '=isMenuActive'
    },
    link: function(scope, element, attrs) {
      console.log('trigger directive');
      
      for (var i in scope.matches) {
        var match = scope.matches[i];
        
        if ($state.current.name.includes(match)) {
          console.log('element', element);
          element.addClass('active');
          break;
        }
      } 
    }
  }
}])

.controller('mainCtrl', function($state) {
  var vm = this;
  
  vm.menus = [
    {
      name: 'Home',
      route: 'home',
      matches: ['home', 'some-other-route']
    },
    {
      name: 'About',
      route: 'about',
      matches: ['about', 'other-route']
    },
    {
      name: 'Contact',
      route: 'contact',
      matches: ['contact', 'another-route']
    }
  ];
  
  vm.go = function(route) {
    $state.go(route);
  }
})
ul {
  list-style-type: none;
}

ul li {
  display: inline-block;
  margin-right: 20px;
  cursor: pointer;
  font-weight: bold;
}

ul li:hover {
  opacity: 0.7;
}

.active a {
  color: red;
}
<html ng-app="app">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/1.0.22/angular-ui-router.js"></script>
  </head>
  <body>
    <div ng-controller="mainCtrl as vm">
      <ul>
        <li ng-repeat="menu in vm.menus" ng-click="vm.go(menu.route)" is-menu-active="menu.matches">
          <a>{{menu.name}}</a>
        </li>
      </ul>
    </div>
    <div ui-view></div>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...