angular-ui dropdown-toggle [object Object] не имеет родительского метода

У меня проблема с использованием angular-ui Bootstrap в моем проекте. А именно директива раскрывающегося списка.

К настоящему времени у меня есть HTML, который является просто копией-вставкой из примеров:

<ul>
 <li class="dropdown">
   <a class="dropdown-toggle"> Drop!</a>
   <ul class="dropdown-menu">
     <li> one </li>
     <li> two </li>
   </ul>
 </li>
</ul>

Когда Angular компилирует HTML, эта ошибка возникает для каждого раскрывающегося списка, который у меня есть на странице:

TypeError: Object [object Object] has no method 'parent'
at link (http://localhost:3000/vendor/ui-bootstrap-tpls-0.7.0.js:1316:15) 
at nodeLinkFn (http://localhost:3000/vendor/angular/angular.js:6124:13)
at compositeLinkFn (http://localhost:3000/vendor/angular/angular.js:5536:15)
at compositeLinkFn (http://localhost:3000/vendor/angular/angular.js:5539:13)
at compositeLinkFn (http://localhost:3000/vendor/angular/angular.js:5539:13)
at compositeLinkFn (http://localhost:3000/vendor/angular/angular.js:5539:13)
at compositeLinkFn (http://localhost:3000/vendor/angular/angular.js:5539:13)
at publicLinkFn (http://localhost:3000/vendor/angular/angular.js:5444:30)
at boundTranscludeFn (http://localhost:3000/vendor/angular/angular.js:5555:21)
at controllersBoundTransclude (http://localhost:3000/vendor/angular/angular.js:6145:18) <a class="dropdown-toggle">  

Эта строка связывает событие щелчка с родителем .dropdown-toggle (очевидно, это li.dropdown).

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

p.s. HTML скомпилирован из Jade, и я использую Bootstrap 3, но я надеюсь, что в этот раз это не важно.

UPD: по просьбе Никса включаю head и app.js

head
  title= title
  meta(charset='utf-8')
  meta(name='viewport', content='width=device-width, initial-scale=1')
  link(rel='stylesheet', href='/vendor/bootstrap/css/bootstrap.min.css')
  link(rel='stylesheet', href='/stylesheets/client/main.css')

  script(src='/vendor/jquery-1.10.2.min.js', type='text/javascript')
  script(src='/vendor/angular/angular.js', type='application/javascript')
  script(src='/vendor/angular/angular-route.js', type='application/javascript')
  script(src='/vendor/ui-bootstrap-tpls-0.7.0.js', type='text/javascript')

  script(src='/angular/client/app.js', type='text/javascript')
  script(src='/angular/client/menu/controllers.js', type='text/javascript')
  //a lot of other app stuff...

это приложение.js

var app = angular.module('clientApp',[
  'ngRoute',
  'menuControllers'
]);

это контроллеры меню

var menu = angular.module('menuControllers', [
  'sharedModels',
  'ui.bootstrap'
]);
menu.controller('menuCtrl', ['$scope', 'categoriesModel', 'subcategoriesModel', menuCtrl]);

и полный исходный код menu.jade. он включен в тело ng-app='clientApp'

div.container(ng-controller='menuCtrl')
  div(ng-repeat='cat in categoriesModel')
    div.btn-group
      a.btn.btn-default(href='#!/category/{{cat._id}}') {{cat.name}}
      ul
        li.dropdown
          a.dropdown-toggle Dropdown
          ul.dropdown-menu(ng-repeat='subcat in subcategoriesModel')
            li: a(ng-href='#!/subcategories/{{subcat._id}}') {{subcat.name}}

person Eugene Kostrikov    schedule 12.12.2013    source источник
comment
Бросьте скрипку на этот вопрос, и он будет дан ответ в течение нескольких минут. Похоже, у вас есть объект против селектора jQuery, но вам нужен какой-то тип JS, чтобы понять это.   -  person Nix    schedule 12.12.2013
comment
Хорошо. он работает plunker и не выдает никаких ошибок. plnkr.co/edit/ggNFUHDaJ6ZQLVRO66FJ   -  person Eugene Kostrikov    schedule 12.12.2013
comment
:) иногда попытка воспроизвести проблему помогает нам решить проблему. Опубликуйте свой код (тег заголовка) и js (где вы настраиваете angular).   -  person Nix    schedule 12.12.2013
comment
Я обновил тему. Честно говоря, мне кажется, что лучше переписать это с нуля.   -  person Eugene Kostrikov    schedule 12.12.2013
comment
Я ищу его, но не очень повезло. Подтвердили ли вы, что можете перейти к /vendor/jquery-1.10.2.min.js (я заметил, что ваш plunkr не включил его).   -  person Nix    schedule 12.12.2013
comment
Конечно, каждый файл .js загружается в браузер, и все зависимости выполняются (по крайней мере, ошибка внедрения не выдается). На самом деле, я не использую JQuery вместе с Angular, это была одна из попыток решить эту проблему.   -  person Eugene Kostrikov    schedule 12.12.2013


Ответы (1)


Ваш plunkr не соответствует нефриту (дайте мне сломанный plunkr, и я починю его). Я знаю, что вы пытаетесь настроить таргетинг на директиву «раскрывающийся список», но иногда внутри angular происходит какая-то черная магия, о которой вы можете не думать. Например, класс btn-group может быть директивой, которая стреляет и разрушает магазин. Пожалуйста, обновите скрипт, чтобы он соответствовал вашему нефриту, также убедитесь, что вы вызываете любые другие библиотеки angular OTS, которые вы включаете в свой проект.

Выстрел в темноте:

Сдача:

ul.dropdown-menu(ng-repeat='subcat in subcategoriesModel')
    li: a(ng-href='#!/subcategories/{{subcat._id}}') {{subcat.name}}

to:

ul.dropdown-menu
    li(ng-repeat='subcat in subcategoriesModel'): a(ng-href='#!/subcategories/{{subcat._id}}') {{subcat.name}}
person Nix    schedule 12.12.2013
comment
Кажется, это какая-то черная магия. plnkr.co/edit/ggNFUHDaJ6ZQLVRO66FJ Нет ошибки parent(). Затронуто только содержимое выпадающего списка. В любом случае, я полностью переписал этот модуль, и он работает! До сих пор не знаю, что вызвало эту ошибку... - person Eugene Kostrikov; 12.12.2013