javascript - 有没有办法根据 Angular 中的元素数量更改 col-md 类?

标签 javascript css angularjs twitter-bootstrap grid-system

我想自动调整 bootstrap 列,“自动调整”的意思是根据要显示的元素数量动态创建网格,我有以下 html:

<div class="vertical-center">
    <div class="dashboard-options row panel">

        <div class="panel-heading">
            Menu
        </div>
        <div class="panel-body">
            <!-- The followig <a> element is generated automatically using angular ng-repeat 
                 This is an Angular Directive in fact, so that it's used in all the dashboards,
                 There are a lot of dashboards, and each has different amount of options,
                 This <a> element is setup to take 4 columns of the row, but sometimes there are
                 More than 3 <a> elements so a new row is generated, thats what i don't want -->
            <a href="somewhere" class="col-md-4">
                <div class="dashboard-option button-effect text-center">
                    <i class="fa fa-something"></i>
                    <p>Some Text</p>
                </div>
            </a>
        </div>

    </div>
</div>

我正在使用 Angular Directive(指令)和 ng-repeat 生成 html,这是指令:

<a href="somewhere" class="col-md-4">
    <div class="dashboard-option button-effect text-center">
        <i class="fa fa-something"></i>
        <p>Some Text</p>
    </div>
</a>

如您所见,它有一个 col-md-4 class 这意味着只有 3 个元素适合一行,我想要的是,无论有多少元素(它们总是在 2 和 5 之间),元素都可以放在一行中,无论它们是 2 还是 5如果它们是 4 个元素,则它们应该放在一行中 <a>类应该是 col-md-3 , 如果它们是 2 个元素类 <a>应该是 col-md-6等等。

当我使用 AngularJS 时,有没有办法以 Angular 方式进行操作?我会在几个具有不同 Ctrl 的 View 上使用它,所以如果可能的话我会保持代码干燥。

最佳答案

保持简单,使用 ng-class 和一些方法来根据元素的数量确定要使用的类。

<div ng-class="vm.getClass()" />

更新:

为了保持干燥,您还可以使用自定义指令,而不是使用 ng-class 手动设置所需的类。像这样:

(function() {
'use strict';

function bootstrapRow () {

    var directive = {
        link: link,
        restrict: 'A',
        scope : {
            bootstrapRow : '='
        }
    };
    return directive;

    function link(scope, element, attrs) {
        scope.$watch('bootstrapRow', function(noElements){
            if(noElements){
                //reset
                element.removeClass('col-md-6');
                element.removeClass('col-md-4');
                element.removeClass('col-md-3');
                element.removeClass('col-md-2');

                console.log(noElements);
                switch(parseInt(noElements)){
                    case 2:
                        element.addClass('col-md-6');break;
                    case 3:
                        element.addClass('col-md-4');break;
                    case 4:
                        element.addClass('col-md-3');break;
                    case 5:
                        element.addClass('col-md-2');break; // this probably needs some work
                }
            }
        });            
    }
}


angular
    .module('app')
    .directive('bootstrapRow', bootstrapRow);

})();

你可以像这样使用它:

<div bootstrap-row="vm.rowCount"></div>

关于javascript - 有没有办法根据 Angular 中的元素数量更改 col-md 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724382/

相关文章:

php - jQuery 发布到 php 文件

javascript - 如何一次导出所有常量?

HTML id 属性在 Google Chrome 中不起作用

Chrome 和 Firefox 之间的 HTML 范围元素垂直位置差异

javascript - Angular : Select doesn't change selected option on change of bound scope variable

javascript - TS Lint 错误;类型 X 不可分配给类型 'IntrinsicAttributes & RefAttributes<any>'

javascript - 基于视口(viewport)的 Adsense

html - 下拉菜单项将其他元素移动到右侧

unit-testing - 如何在 Jasmine 测试中模拟 Angular $resource

javascript - 如何在 ng-click 操作中基于文本框值将对象添加到数组