编译错误,需要手风琴控制器

时间:2014-04-21 15:00:26

标签: javascript angularjs angular-ui-bootstrap

使用 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>

4 个答案:

答案 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);