Controller carousel, required by directive ngTransclude, can

Недавно подключил к проекту AngularJS Bootstrap-UI и сразу обнажурил баг: на страницах, где используется carousel (класс для слайдшоу в Bootstrap), выскакивает следующая ошибка:

1
Controller 'carousel', required by directive 'ngTransclude', can't be found! 

Полный лог:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Error: [$compile:ctreq] Controller 'carousel', required by directive 'ngTransclude', can't be found!
http://errors.angularjs.org/1.2.13/$compile/ctreq?p0=carousel&p1=ngTransclude
at http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:146612
at g (http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:169688)
at v (http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:171431)
at http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:174956
at http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:180992
at u (http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:195225)
at u (http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:195225)
at http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:195902
at u.$eval (http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:200165)
at u.$digest (http://aliya-soap.ru/assets/application-177047d459241e8020f5604db9c970de.js.pagespeed.jm.eNxPlzr5Jo.js:1:198869) <div ng-class="{
'active': leaving || (active && !entering),
'prev': (next || active) && direction=='prev',
'next': (next || active) && direction=='next',
'right': direction=='prev',
'left': direction=='next'
}" class="left carousel-control item text-center ng-isolate-scope" ng-transclude="" href="#carousel-example-generic" data-slide="prev">

Погуглив, обнаружил, что я не единственный, кто встретил этот баг, вот только единственное решение, которое там предложили – отключить ui.bootstrap.

Баг находится в директиве carousel контроллера ui.bootstrap.carousel. Можно конечно его удалить из исходников, но я предлагаю способ лучше: переинициализировать этот модуль в нашем javascript файле:

application.js
1
2
3
4
5
6
7
angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
    .controller('CarouselController', ['$scope', '$timeout', '$transition', '$q', function ($scope, $timeout, $transition, $q) {
    }]).directive('carousel', [function() {
        return {

        }
}]);

Причина бага? Я её, честно говоря, не вижу. Директива должна вызываться только от аттрибута или элемента ‘carousel’, но по непонятной причине вызывается и от класса с таким именем.

Комментарии