【问题标题】:Angular UI - Bootstrap Accordion not working/dynamic ng-includeAngular UI - Bootstrap Accordion 不工作/动态 ng-include
【发布时间】:2015-03-03 22:05:51
【问题描述】:

我的手风琴有问题:

我尝试做与demo 显示的几乎相同的操作,我有一个对象数组。每个对象都包含一个字符串,即标题 title。它还包含一个字符串,它是另一个 HTML 文件的相对 路径,它应该是手风琴组的内容。

$scope.groups = [{
    groupTitle: "Title1",
    templateUrl: "sites/file1.html"
}, {
    groupTitle: "Title2",
    templateUrl: "sites/file2.html"
}];

此代码位于名为 AccordionController 的控制器中。 在我的 HTML 中,我的控制器中有这段代码

<accordion>
    <accordion-group ng-repeat="group in groups" heading="{{group.groupTitle}}">
        <div ng-include="group.templateUrl"></div>
    </accordion-group>
</accordion>

ng-include 和那个东西可以工作,但是这些组基本上不会对点击做出反应然后打开或关闭,我还尝试添加 is-open 指令。我用参数指向一个布尔数组,它改变了ng-click上的特定值

烦人的事情——无论如何我真的不明白——这一切都有效here in Plunker

我也链接了

<link rel="stylesheet" type="text/css" href="styles/bootstrap.min.css" />
<script type="text/javascript" src="scripts/angular.js"></script>
<script type="text/javascript" src="scripts/ui-bootstrap-tpls-0.12.0.js"></script>

并将bootstrap.ui 添加到我的模块中。

我在加载控制台时收到错误消息:TypeError: undefined is not a function

我将不胜感激!

【问题讨论】:

    标签: angularjs angularjs-ng-repeat angular-ui angular-ui-bootstrap angularjs-ng-include


    【解决方案1】:

    我得到了解决方案:

    首先,将控制器命名为 AccordionController 会与 angular ui bootstrap 产生冲突 - 内部控制器是这样命名的。

    我不确定这是否是最佳解决方案,但对我来说效果很好。

    这是 HTML:

    <div ng-controller="AccordionCtrl">
        <accordion class="accordion" close-others="oneAtATime">
            <accordion-group  ng-repeat="group in groups" is-open="status.isOpen[$index]" >
                <accordion-heading>
                    {{group.groupTitle}} <i class="fa chevron-icon" ng-class="{'fa-chevron-down': status.isOpen[$index], 'fa-chevron-right': !status.isOpen[$index]}"></i>
                </accordion-heading>
                <div ng-include="group.templateUrl"></div>
            </accordion-group>
        </accordion>
    </div>
    

    当然还有 JS:

    settings.controller('AccordionCtrl', ['$scope',
    function ($scope) {
        $scope.oneAtATime = false;
    
        $scope.groups = [{
            groupTitle: "Test1",
            templateUrl: "file1.html"
        }, {
            groupTitle: "Test2",
            templateUrl: "file2.html"
        }, {
            groupTitle: "Test3",
            templateUrl: "file3.html"
        }];
    
        $scope.status = {
            isOpen: new Array($scope.groups.length)
        };
    
        for (var i = 0; i < $scope.status.isOpen.length; i++) {
            $scope.status.isOpen[i] = (i === 0);
        }
    }]);
    

    【讨论】:

      【解决方案2】:

      分叉你的 plnkr 。加载的模板文件

      angular.module('ui.bootstrap.demo', ['ui.bootstrap']);
      angular.module('ui.bootstrap.demo').controller('AccordionDemoCtrl', function ($scope) {
        $scope.groups = [
          {
            title: 'Dynamic Group Header - 1',
            content: 'Dynamic Group Body - 1',
            templateUrl: 'file1.html'
          },
          {
            title: 'Dynamic Group Header - 2',
            content: 'Dynamic Group Body - 2',
            templateUrl: 'file2.html'
          }
        ];
      });
      
      
      <div ng-controller="AccordionDemoCtrl">
      
        <accordion>
          <accordion-group ng-repeat="group in groups" heading="{{group.title}}">
            <div ng-include="group.templateUrl"></div>
          </accordion-group>
        </accordion>
      </div>
      

      【讨论】:

      • 谢谢你。在 plnkr 中它工作正常 - 我想要它!可悲的是,它在我的应用程序中不起作用。我有 2 个模块(appsettings),并且在具有该范围的手风琴 3 控制器中。在两个模块中,我都添加了bootstrap.ui,并且模块也互相认识
      • 当然,在 NodeWebkit 中,我在问题中遇到上述错误,我试图将手风琴作为独立的来解决我的问题,在 NodeWebkit 中我得到相同的错误。在 Firefox 中,我得到:Error: d.addGroup is not a function。错误的最后一行(在 Firefox 中)是:"&lt;div ng-repeat="group in groups" heading="{{group.groupTitle}}" class="panel panel-default ng-isolate-scope"
      • 你检查过this ??
      • 我现在尝试了很多 - 明白了,我会在这里发布答案。非常非常感谢
      【解决方案3】:

      其实,可能有更简单的解决方案。

      您可以确保链接不会传播 URL 更改。

      添加到a标签onclick="return false;"

      来源:click here

      【讨论】:

        猜你喜欢
        • 2013-03-01
        • 1970-01-01
        • 2017-12-05
        • 2015-01-07
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 2014-01-22
        • 1970-01-01
        相关资源
        最近更新 更多