Twitter bootstrap 使用AngularJS的Twitter引导脚手架

Twitter bootstrap 使用AngularJS的Twitter引导脚手架,twitter-bootstrap,angularjs,scaffolding,Twitter Bootstrap,Angularjs,Scaffolding,我想在AngularJS支持的应用程序中使用twitter引导。我从使用脚手架的网格布局开始,遇到了以下问题: 根据有关引导的文档和示例,网格布局必须遵循以下结构: <div class="row"> <div class="span4">...</div> <div class="span8">...</div> </div> <div class="row"> <div clas

我想在AngularJS支持的应用程序中使用twitter引导。我从使用脚手架的网格布局开始,遇到了以下问题:

根据有关引导的文档和示例,网格布局必须遵循以下结构:

<div class="row">
    <div class="span4">...</div>
    <div class="span8">...</div>
</div>
<div class="row">
    <div class="span4">...</div>
    <div class="span8">...</div>
</div>

据我所知,嵌套ng重复的摘要正在触发外部ng重复的摘要?有人能提出一种正确的实现方法吗?

这里的问题是,当您使用
ng repeat
Angular时,它会为列表表达式创建一个手表,列表表达式是项目数组和过滤器的组合。当Angular运行摘要时,它会一直调用该表,直到表达式的值不再改变为止。由于您的过滤器总是创建一个新数组,所以每次调用该值时,该值都会发生变化,并且角度会陷入无休止的循环中。因此,您的代码与执行此操作基本相同:

$scope.myList = [];
$scope.$watch('myList', function() {
    $scope.myList = [];
});
使用示波器上的手表,您可以告诉Angular按值而不是参照进行比较,以避免无休止的摘要问题,如下所示:

$scope.myList = [];
$scope.$watch('myList', function() {
    $scope.myList = [];
}, true); // Passing true as the last argument triggers comparison by value instead
<!doctype html>
<html ng-app="myApp">
<head>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.angularjs.org/1.0.5/angular.min.js"></script>
    <script>
    angular.module('myApp', []).controller('Ctrl', function($scope) {
        $scope.projects = [
            {name: 'My Project 1'},
            {name: 'My Project 2'},
            {name: 'My Project 3'},
            {name: 'My Project 4'},
            {name: 'My Project 5'},
            {name: 'My Project 6'}
        ];

        var splitIntoRows = function(array, columns) {
            if (array.length <= columns) {
                return [array];
            }

            var rowsNum = Math.ceil(array.length / columns);

            var rowsArray = new Array(rowsNum);

            for (var i = 0; i < rowsNum; i++) {
                var columnsArray = new Array(columns);
                for (j = 0; j < columns; j++) {
                    var index = i * columns + j;

                    if (index < array.length) {
                        columnsArray[j] = array[index];
                    } else {
                        break;
                    }
                }

                rowsArray[i] = columnsArray;
            }

            return rowsArray;
        }

        $scope.$watch('projects', function() {
            $scope.projectRows = splitIntoRows($scope.projects, 3);
        });
    });
    </script>
</head>
<body ng-controller="Ctrl">
    <ul class="row" ng-repeat="projectRow in projectRows">
        <li class="span4" ng-repeat="project in projectRow">
            {{project.name}}
        </li>
    </ul>
</body>
</html>
但这在你的情况下是不可能的。因此,您最好只在需要时将项目阵列拆分为更小的阵列,如下所示:

$scope.myList = [];
$scope.$watch('myList', function() {
    $scope.myList = [];
}, true); // Passing true as the last argument triggers comparison by value instead
<!doctype html>
<html ng-app="myApp">
<head>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.angularjs.org/1.0.5/angular.min.js"></script>
    <script>
    angular.module('myApp', []).controller('Ctrl', function($scope) {
        $scope.projects = [
            {name: 'My Project 1'},
            {name: 'My Project 2'},
            {name: 'My Project 3'},
            {name: 'My Project 4'},
            {name: 'My Project 5'},
            {name: 'My Project 6'}
        ];

        var splitIntoRows = function(array, columns) {
            if (array.length <= columns) {
                return [array];
            }

            var rowsNum = Math.ceil(array.length / columns);

            var rowsArray = new Array(rowsNum);

            for (var i = 0; i < rowsNum; i++) {
                var columnsArray = new Array(columns);
                for (j = 0; j < columns; j++) {
                    var index = i * columns + j;

                    if (index < array.length) {
                        columnsArray[j] = array[index];
                    } else {
                        break;
                    }
                }

                rowsArray[i] = columnsArray;
            }

            return rowsArray;
        }

        $scope.$watch('projects', function() {
            $scope.projectRows = splitIntoRows($scope.projects, 3);
        });
    });
    </script>
</head>
<body ng-controller="Ctrl">
    <ul class="row" ng-repeat="projectRow in projectRows">
        <li class="span4" ng-repeat="project in projectRow">
            {{project.name}}
        </li>
    </ul>
</body>
</html>

角度.module('myApp',[]).controller('Ctrl',function($scope){
$scope.projects=[
{name:'我的项目1'},
{name:'我的项目2'},
{name:'我的项目3'},
{name:'我的项目4'},
{name:'我的项目5'},
{name:'我的项目6'}
];
var splitintorrows=函数(数组、列){
if(array.length)