tpls modal bootstrap twitter-bootstrap angularjs

modal - ¿Cómo utilizaría AngularJS ng-repeat con los andamios de Twitter Bootstrap?



modal bootstrap angularjs (5)

Aquí hay una manera:

<div ng-controller="MyCtrl"> <div ng-repeat="project in projects"> <span ng-if="$index % 3 == 0"> <hr /> <div class="row"> <h3 class="span4" ng-if="projects[$index+0]">{{projects[$index+0]}}</h3> <h3 class="span4" ng-if="projects[$index+1]">{{projects[$index+1]}}</h3> <h3 class="span4" ng-if="projects[$index+2]">{{projects[$index+2]}}</h3> </div> </span> </div> </div>

Esta forma también funcionará si, por ejemplo, tiene 7 elementos de datos: en los últimos 3 datos, solo mostrará el elemento 7 y no intentará mostrar el elemento no existente 8 y 9.

http://jsfiddle.net/4LhN9/68/

EDITAR : Actualizado para usar ng-if y angular 1.2.12

¿Cómo usaría AngularJS ng-repeat para mostrar el siguiente HTML (Twitter Bootstrap Scaffolding)? Esencialmente, cada tercer registro que necesito para cerrar </div> , imprimir una <hr> y luego abrir otra <div class="span4">

<div class="row"> <div class="span4"> <h3> Project A </h3> </div> <div class="span4"> <h3> Project B </h3> </div> <div class="span4"> <h3> Project C </h3> </div> </div> <hr> <div class="row"> <div class="span4"> <h3> Project D </h3> </div> <div class="span4"> <h3> Lab Title </h3> </div> <div class="span4"> <h3> Project E </h3> </div> </div>

He creado un violín para demostraciones de código.
http://jsfiddle.net/ADukg/261/


Para mantener la lógica de visualización fuera del controlador y tener una solución más reutilizable, puede crear un filtro personalizado que divida la matriz en grupos de filas:

angular.module(''app'').filter(''group'', function() { /** * splits an array into groups of the given size * e.g. ([1, 2, 3, 4, 5], 2) -> [[1, 2], [3, 4], [5]] */ return function(array, groupSize) { return _.groupBy(array, function(val, index) { return Math.floor(index / groupSize); }); }; });

Y en la vista:

<div class="row" ng-repeat="group in projects | group:3"> <div class="span4" ng-repeat="project in group"> {{project}} </div> </div>

Para incluir la hora puede usar los puntos de inicio y finalización de ng-repeat:

<div class="row" ng-repeat-start="group in projects | group:3"> <div class="span4" ng-repeat="project in group"> {{project}} </div> </div> <hr ng-repeat-end />


Pasando de la respuesta más fácil . No me gusta la solución original debido a los elementos dom vacíos que produce. Esto es para 3 divs por fila.

<div ng-controller="ModulesCtrl"> <div class="row" ng-repeat="i in fields.range()"> <div class="span4" ng-repeat="field in fields.slice(i,i+3)"> <h2>{{field}}</h2> </div> </div> </div>

En la función FieldsCtrl ($ scope):

$scope.fields.range = function() { var range = []; for( var i = 0; i < $scope.fields.length; i = i + 3 ) range.push(i); return range; }

Si conoce fields.length, puede en lugar de fields.range () usar [0,3,6,9] etc.


Una forma más elegante es usar el modelo de vista para proporcionar una colección fragmentada y luego dejar que la vista lo maneje como

<div ng-controller="Controller"> Projects <input ng-model="projects"></input> <hr/> <div ng-repeat="row in rows"> <div ng-repeat="project in row"> Projects {{project}} </div> <hr/> </div> </div>​

y el coffeescript es bastante simple

# Break up an array into even sized chunks. chunk = (a,s)-> if a.length == 0 [] else ( a[i..i+s-1] for i in [0..a.length - 1 ] by s) @Controller = ($scope)-> $scope.projects = "ABCDEF" $scope.$watch "projects", -> $scope.rows = chunk $scope.projects.split(""), 3 angular.bootstrap(document, []);

Al aire libre

http://jsfiddle.net/ADukg/370/


Los puntos finales ng-repeat-start y ng-repeat-end parecen una forma conveniente de lograr esto:

Lo que lleva al código simple.

<div ng-controller="MyCtrl"> <div ng-repeat-start="project in projects"> <span> <div class="row"> <h3 class="span4">{{project}}</h3> </div </span> </div> <hr ng-repeat-end ng-if="($index + 1) % 3 == 0" /> </div>

Ver este jsfiddle