使用 angular-bootstrap ui 时,我在控制台中遇到以下错误。我有角度1.2.6,bootstrap 3.0和angular-bootstrap 0.10.0。
错误:[$ compile:ctreq]无法找到指令'accordionGroup'所需的控制器'accordion'!
任何人都知道为什么会这样吗? 我的HTML代码。
<div ui-view>
<accordion-group id="crud-talbe" ng-repeat="grid in grids" heading="{{grid.name}}">
<a ng-click="createNewEntity(grid.name)" class="btn btn-default">create new {{grid.name}}</a>
<div class="crudGridStyle" ng-grid="grid" />
</accordion-group>
答案 0 :(得分:8)
从您提供的代码中,您并未包含足够的ui-bootstrap所需的代码。
这看起来像你需要的最小值以及编译器给出错误的原因。
<accordion close-others="oneAtATime">
<accordion-group heading="Static Header, initially expanded" is-open="true">
This content is straight in the template.
</accordion-group>
</accordion>
这是直接在ui-bootstrap网站...手风琴部分。
你可以在手风琴组指令的代码中看到手风琴是必需的...
来自github:
// The accordion-group directive indicates a block of html that will expand and collapse in an accordion
.directive('accordionGroup', function() {
return {
require:'^accordion', // We need this directive to be inside an accordion
restrict:'EA',
transclude:true, // It transcludes the contents of the directive into the template
replace: true, // The element containing the directive will be replaced with the template
templateUrl:'template/accordion/accordion-group.html',
scope: {
heading: '@', // Interpolate the heading attribute onto this scope
isOpen: '=?',
isDisabled: '=?'
},
controller: function() {
this.setHeading = function(element) {
this.heading = element;
};
},
link: function(scope, element, attrs, accordionCtrl) {
accordionCtrl.addGroup(scope);
scope.$watch('isOpen', function(value) {
if ( value ) {
accordionCtrl.closeOthers(scope);
}
});
scope.toggleOpen = function() {
if ( !scope.isDisabled ) {
scope.isOpen = !scope.isOpen;
}
};
}
};
})
答案 1 :(得分:4)
我自己编译$时发现了这个错误。 导致我的代码 HTML
<accordion close-others="oneAtATime">
<accordion-group ng-repeat="group in groups" heading="Static Header, initially expanded" is-open="true">
This content is straight in the template.
</accordion-group>
</accordion>
更改为
<accordion close-others="oneAtATime" ng-repeat="group in groups">
<accordion-group heading="Static Header, initially expanded" is-open="true">
This content is straight in the template.
</accordion-group>
</accordion>
我修好了
答案 2 :(得分:0)
使用最新的ui-bootstrap(截至2016年2月29日)进入类似问题。在我的标记中,我确实同时拥有了uib-accordion和uib-accordion-group指令。我初始化了isOpen,isDisabled只是为了看看是不是问题,但仍然看到了问题。
它只在移动Safari上体现了我的BTW。错误消息类似于VERRRRY,仅在应用程序第一次加载到该设备上时才出现。它实际上并没有以任何方式妨碍应用程序,只是讨厌。
在所有角度指令之前添加技术上可选但首选的“数据 - ”似乎可以解决问题。
答案 3 :(得分:0)
在我的情况下,我使用UI路由器从我在app的config.router.js中定义的控制器重定向到$状态。我想这是在控制器有机会承认该指令之前触发的。
我刚刚在$ timeout中包装了重定向:
$timeout(function () {
$state.go( 'state.name', { params } );
}, 0);