2013-11-06 2 views
-1

У меня есть plunker этого вопроса на http://plnkr.co/edit/yJNrpATGWY7iUeVcx6lx?p=previewAngularJS директива не работает

index.html:

<!DOCTYPE html> 
<html ng-app="ItemEnum"> 

    <head> 
    <link data-require="[email protected]*" data-semver="3.0.0" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" /> 
    <link data-require="[email protected]*" data-semver="3.0.0" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" /> 
    <script data-require="[email protected]*" data-semver="3.0.0" src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> 
    <script data-require="[email protected]" data-semver="1.2.0-rc3-nonmin" src="http://code.angularjs.org/1.2.0-rc.3/angular.js"></script> 
    <script data-require="[email protected]*" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
    <script src="script.js"></script> 
    </head> 

    <body> 
    <div ng-controller="EnumCtrl"> 
     <ul class="nav"> 
      <li ng-repeat="item in items"> 
       <a ng-href="" di-enum-items di-item-class="link_active"> 
        <span> {{item.name}} ({{item.count}}) </span> 
       </a> 
      </li> 
     </ul> 
    </div> 
    </body> 

</html> 

script.js:

angular.module('ItemEnum', []) 
.controller('EnumCtrl', function($scope) { 
    $scope.items = [ 
     {name: 'cars',count: 10}, 
     {name: 'bikes',count: 20} 
    ]; 
    }) 
    .directive('diEnumItems', function() { 
    return { 
     restrict: 'A', 
     scope: { 
     diItemClass: '=' 
     }, 
     link: function(scope, element, attrs) { 

      $(element).bind('click', function() { 
       if ($(element).hasClass(attrs.diItemClass)) { 
        element.removeClass(attrs.diItemClass); 
       } else { 
        element.addClass(attrs.diItemClass); 
       } 
      }); 

     } 
    }; 
    }); 

style.css:

/* Styles go here */ 
.link_active { 
    color: red; 
} 

Как-то угловая директива прикручивает перечисление ссылок. Что я делаю не так? Обратите внимание, что я не ищу ответа, который говорит мне, что есть более простой способ сделать это. Я знаю, что могу просто создать директиву, которая просто действует только на класс css - и помимо операций класса css, выполняемая директивой, здесь отлично работает. Эта директива более обширна и делает некоторые другие вещи. Тем не менее, plunker показывает основную проблему, которую я испытываю. Я прочитал некоторые другие сообщения SO о директивах, а также прочитал руководство «Угловая директива», но, похоже, не может пройти мимо этой основной проблемы.

+0

Названное по этому вопросу плачевно – boatcoder

ответ

1

Вы создаете новую область действия своей директивы, которая заворачивает рендеринг ng-href. Я действительно не вижу причин, по которым вам нужна область действия в этой ситуации, поскольку вы все равно используете attrs, поэтому я удалил ее. Работает сейчас.

http://plnkr.co/edit/6ocoBa9yTQWMeL95O5Yw?p=preview

+0

Привет Майк, хорошо, да, я мог бы сделать это раньше, и работал отлично. Я обновил плункер - см. Http://plnkr.co/edit/yJNrpATGWY7iUeVcx6lx?p=preview - чтобы добавить больше сложности ближе к тому, что мне нужно. В принципе, когда элемент активирован/деактивирован, мне нужна директива для вызова функции во внешнем контроллере, которая обновит данные на всей странице в зависимости от того, был ли фильтр активирован/деактивирован. Благодаря! – webteckie

+0

Не уверен, что мой последний комментарий был ясен, но это все еще проблема для меня. Плункер в последнем комментарии имеет более подробную информацию о проблеме, с которой я сталкиваюсь, когда область действия директивы, похоже, испортила мое перечисление ng-repeat. – webteckie

+0

@ user2961845 Понял, я просто на работе;) Думаю, я вижу твою проблему и буду играть с ней сегодня вечером. –

 Смежные вопросы

  • Нет связанных вопросов^_^