2014-07-09 5 views
5

내가 AngularJS와 데이터에 내장 된 제품 그리드 건물입니다 - 이미지 및 제품 상세 정보 (텍스트)부트 스트랩 응답 제품 그리드

텍스트 때로는 혼란을 일으키는 원인이되는 2 라인 확장이있을 곳을. 여기

내 코드입니다 :

이는 모습입니다
<div class="row"> 
    <div data-ng-repeat="s in Results"> 
     <div class="col-xs-4"> 
      <a href="#" class="thumbnail"> 
       <div> 
        <img ng-src="{{s.ProductImage}}" class="img-responsive"> 
       </div> 
       <div> 
        {{s.Store}} {{s.Category}} {{s.ProductName}} 
       </div> 
      </a> 
     </div> 
     <div class="clearfix visible-xs-block"></div> 
    </div> 
</div> 

:

enter image description here

가 어떻게 <div>의 모두 같은 높이가되도록 그것을 해결할 수 있습니까? 솔루션을 온라인으로 보려고했지만 50 %라고 생각합니다. 도와주세요.

참고 : 콘텐츠를 숨기고 싶지는 않습니다.

+0

내가 유일한 옵션은 세 포함하는 열을'(COL-XS-4)'각 내부 반복을하고 기반으로 적절한 컬럼에 모든 항목을 분할 만드는 것입니다 생각 :

는 그래서 난 제품 목록이 카운트시. 나는 각도로 그렇게하는 법을 모른다. 그래서 나는 그 질문을 너무 높이 세웠다. 나는이 문제를 내 언어로 여러 번 선택했다. –

+0

내 솔루션으로 높이가 같지 않아서, 'jquery'가 필요합니다. 로드 된 모든 항목을 반복하고 최소 높이를 가장 큰 제품인 div와 동일하게 설정합니다. –

답변

2

이것은 내가 나중에이 문제에 다시 걸려 넘어지는 사람에게 한 일입니다. 데이터를 변경하거나 창을 사용하여 크기를 조정할 때

자바 스크립트 AngularJS와없이

function ResizeToLargestElement(element) { 
    var maxHeight = -1; 
    if ($(element).length > 0) { 
     $(element).each(function() { 
      maxHeight = maxHeight > $(this).height() ? maxHeight : $(this).height(); 
     }); 

     $(element).each(function() { 
      $(this).height(maxHeight); 
     }); 
    } 
} 

AngularJS와를 사용하지 않는 사람들을 위해

, 단지 ResizeToLargestElement() 전화 AngularJS와 와

$(window).resize(function() { 
     ResizeToLargestElement('.AutoResizeToLargestElement'); 
});` 

아이디어는로 전화하는 것입니다.은 $scope.Results이 변경되거나 창 크기가 변경 될 때마다 작동합니다.

언제 $scope.Results이 변경되었는지 쉽게 알 수 있지만 요소 (바인딩 된 요소)가 렌더링을 완료하는시기를 쉽게 알 수 없습니다. 이를 위해서는 AngularJS 지시문이 필요합니다. 윈도우 재 크기, angular.element($window).on('resize', function() {...});

HTML

<div class="row"> 
    <div data-ng-repeat="s in Results" data-ng-repeat-finished> <!--ADDED Directive--> 
     <div class="col-xs-4"> 
      <a href="#" class="thumbnail AutoResizeToLargestElement"> <!--ADDED Class--> 
       <div> 
        <img ng-src="{{s.ProductImage}}" class="img-responsive"> 
       </div> 
       <div> 
        {{s.Store}} {{s.Category}} {{s.ProductName}} 
       </div> 
      </a> 
     </div> 
     <!--REMOVED clearfix--> 
    </div> 
</div> 

MyDirectives를 사용할 때

알고.JS

angular.module('myApp').directive('ngRepeatFinished', function ($timeout) { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attr) { 
      if (scope.$last === true) { 
       $timeout(function() { 
        scope.$emit('ngRepeatFinished'); 
       }); 
      } 
     } 
    } 
}); 

mycontroller.js

$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) { 
    ResizeToLargestElement(".AutoResizeToLargestElement"); 
}); 

angular.element($window).on('resize', function() { 
    ResizeToLargestElement(".AutoResizeToLargestElement"); 
}); 

참고 :이이 AngularJS와의 $window에게 종속 목록을 포함하도록 요구합니다. I.E. angular.module('myApp').controller('....', ['...., '$window', ....]);

+0

나의 정확한 문제에 대한 우수하고 철저한 해결책. – isherwood

0

div의 높이를 수동으로 제한하고 overflow을 사용할 수 있습니다. 당신은 항상 당신의 레이아웃에 대한 반응 테이블 (<table class="table table-responsive">)를 사용할 수

<div class="col-xs-4" style="height:200px; overflow: auto;">Content</div> 

같은 것을 사용하거나.

+0

콘텐츠를 숨기고 싶지 않습니다. 죄송합니다 업데이트 질문입니다. –

+0

그런 다음, 최대 높이를 갖는'div' 높이를 얻고 모든 높이를 그 높이로 설정하십시오. 또는 테이블 레이아웃을 사용하십시오. – Ranveer

+0

최대 높이 얻기 - 브라우저에서 크기를 조정할 때 함수를 호출 할 수 있습니까? –

1

각 제품의 동적 높이를 유지하려면 결과를 열로 분할해야합니다. 그런 다음 오른쪽 열에 올바른 항목을 넣으려면 ng-if을 사용하십시오. 매 3 번째 항목 모두 동일한 열로 이동합니다. 이들을 서로 다른 열로 설정하려면 각각의 추가 열에 대해 $index1까지 줄이십시오.

<div class="row"> 
    <div class="col-xs-4"> 
     <div ng-repeat="s in Results"> <a href="#" class="thumbnail" ng-if="$index%3==0"> 
      <div> 
       <img ng-src="{{s.ProductImage}}" class="img-responsive" /> 
      </div> 
      <div>{{s.Store}} {{s.Category}} {{s.ProductName}}</div> 
      </a> 
      <div class="clearfix visible-xs-block"></div> 
     </div> 
    </div> 
    <div class="col-xs-4"> 
     <div ng-repeat="s in Results"> <a href="#" class="thumbnail" ng-if="($index-1)%3==0"> 
      <div> 
       <img ng-src="{{s.ProductImage}}" class="img-responsive" /> 
      </div> 
      <div>{{s.Store}} {{s.Category}} {{s.ProductName}}</div> 
      </a> 
      <div class="clearfix visible-xs-block"></div> 
     </div> 
    </div> 
    <div class="col-xs-4"> 
     <div ng-repeat="s in Results"> <a href="#" class="thumbnail" ng-if="($index-2)%3==0"> 
      <div> 
       <img ng-src="{{s.ProductImage}}" class="img-responsive" /> 
      </div> 
      <div>{{s.Store}} {{s.Category}} {{s.ProductName}}</div> 
      </a> 
      <div class="clearfix visible-xs-block"></div> 
     </div> 
    </div> 
</div> 
0

이 문제를 해결하는 가장 좋은 방법은 숨겨진 div에 clearfix 클래스를 추가하여 뷰포트 크기를 계산하는 것입니다. 예를 들어 :

대형을 : 내가 6 열 (대형 데스크탑)
중간 크기를 원하는 : 내가 원하는 4 열 (데스크탑)
정 : 내가 3 coumns
전화를 원하는 : 내가 2 열

에게 원하는
<?php $count=1; foreach($productList as $product) : ?> 
    <div class="item col-xs-6 col-sm-4 col-md-3 col-lg-2"> 
      Picture and description 
    </div><!-- /item --> 

    <?php if(($count%2)==0) {?><div class="clearfix visible-xs-block"></div><?php }?> 
    <?php if(($count%3)==0) {?><div class="clearfix visible-sm-block"></div><?php }?> 
    <?php if(($count%4)==0) {?><div class="clearfix visible-md-block"></div><?php }?> 
    <?php if(($count%6)==0) {?><div class="clearfix visible-lg-block"></div><?php }?> 

<?php $count++; endforeach?>