在carousel中添加新项目会在Angular4中添加新行

时间:2018-04-10 03:59:29

标签: javascript html css angular bootstrap-4

我正在使用Angular4应用程序,在这里我有一个旋转木马,我展示产品和产品名称和价格。目前我有6个产品(3 + 3)。如果我点击左侧旋转木马将有2个按钮将显示右侧按钮右侧的3个产品将显示右侧的3个产品。

问题是当我添加新产品轮播时会生成一个新行,而不是像产品系列那样显示。

如何解决是。

HTML

 <section class="carousel slide"  id="myCarousel">
            <div class="container">
                <div class="row">
                    <div class="col-sm-12 text-right mb-4">
                        <a class="btn btn-outline-secondary carousel-control left"  href="#myCarousel" data-slide="prev" title="go back"><i class="fa fa-lg fa-chevron-left"></i></a>
                        <a class="btn btn-outline-secondary carousel-control right" href="#myCarousel" data-slide="next"  title="more"><i class="fa fa-lg fa-chevron-right"></i></a>
                    </div>      
                </div>   
            </div>

            <div class="container p-t-0 m-t-2 carousel-inner">
                <div class="row row-equal carousel-item active m-t-0">
                    <div class="col-sm-4">
                        <div class="card">
                            <div class="card-img-top card-img-top-250 one">
                                <img routerLink="/my-cart"  class="img-fluid" src="assets/Images/Popular_Products/iPhone1.jpg" alt="Carousel 1">
                                <img routerLink="/my-cart" (click)="getProductName(Pname1)" class="img-fluid two" src="assets/Images/Popular_Products/iPhone2.jpg" alt="Carousel 1">
                            </div>
                            <div class="card-block pt-2">
                                <div class="col-sm-12 text-center card-text">
                                   <span #Pname1>iPhone</span>
                                    <br>
                                    <br>
                                    3433 $
                                </div>
                            </div>

                        </div>

                    </div>
                    <div class="col-sm-4">
                        <div class="card">
                            <div class="card-img-top card-img-top-250 one">
                                <img routerLink="/my-cart" class="img-fluid" src="assets/Images/Popular_Products/indianSpices1.jpg" alt="Carousel 1">
                                <img routerLink="/my-cart" (click)="getProductName(Pname)" class="img-fluid two" src="assets/Images/Popular_Products/indianSpices2.jpg" alt="Carousel 1">
                            </div>
                             <div class="card-block pt-2">
                                <div class="col-sm-12 text-center card-text">
                                   <span #Pname>Indian Spices</span>
                                    <br>
                                    <br>
                                    747 $
                                </div>
                            </div>

                        </div>

                    </div>
                    <div class="col-sm-4">
                        <div class="card">
                            <div class="card-img-top card-img-top-250 one">
                                <img  class="img-fluid" src="assets/Images/Popular_Products/6.jpg" alt="Carousel 1">
                                <img routerLink="/my-cart"  class="img-fluid two" src="assets/Images/Popular_Products/10.jpg" alt="Carousel 1">
                            </div>
                            <div class="card-block pt-2">
                                <div class="col-sm-12 text-center card-text">
                                   <span>Home Appliances</span>
                                    <br>
                                    <br>
                                    <span >4500 $</span>
                                </div>
                            </div>

                        </div>

                    </div>

                </div>
                <div class="row row-equal carousel-item m-t-0">
                    <div class="col-sm-4">
                        <div class="card">
                            <div class="card-img-top card-img-top-250 one">
                                <img routerLink="/my-cart" class="img-fluid" src="assets/Images/Popular_Products/8.jpg" alt="Carousel 1">
                                <img routerLink="/my-cart" class="img-fluid two" src="assets/Images/Popular_Products/9.jpg" alt="Carousel 1">
                            </div>
                            <div class="card-block pt-2">
                                <div class="col-sm-12 text-center card-text">
                                    Bicycles
                                    <br>
                                    <br>
                                    2329 $
                                </div>
                            </div>

                        </div>

                    </div>
                    <div class="col-sm-4">
                        <div class="card">
                            <div class="card-img-top card-img-top-250 one">
                                <img routerLink="/my-cart" class="img-fluid" src="assets/Images/Popular_Products/5.jpg" alt="Carousel 1">
                                <img routerLink="/my-cart" class="img-fluid two" src="assets/Images/Popular_Products/12.jpg" alt="Carousel 1">
                            </div>
                            <div class="card-block pt-2">
                                <div class="col-sm-12 text-center card-text">
                                    Electronic Items
                                    <br>
                                    <br>
                                    8333 $
                                </div>
                            </div>
                        </div>

                    </div>
                    <div class="col-sm-4">
                        <div class="card">
                            <div class="card-img-top card-img-top-250 one">
                                <img routerLink="/my-cart" class="img-fluid" src="assets/Images/Popular_Products/2.jpg" alt="Carousel 1">
                                <img routerLink="/my-cart" class="img-fluid two" src="assets/Images/Popular_Products/7.jpg" alt="Carousel 1">
                            </div>
                            <div class="card-block pt-2">
                                <div class="col-sm-12 text-center card-text">
                                    Natural Oils
                                    <br>
                                    <br>
                                    5435 $
                                </div>
                            </div>

                    </div>

                </div>
            </div>
            </div>
        </section>

1 个答案:

答案 0 :(得分:0)

在stackblitz中,没有添加新产品的按钮。要么手动添加新产品,要么从解决方案中遗漏代码。

如果手动添加,可能是将其添加为新行而不是其他列。由于您使用的是bootstrap布局,因此您的代码将屏幕区域分为12个部分,每个图像使用4个部分(分别为sm-12,sm-4)。现在,当您添加另一个产品时,会创建一个新行,因为当前行中没有剩余空间。

要解决这个问题,而不是按部分分配,给每个产品卡一个固定的尺寸,然后让整个滚动水平。

或者,创建另一个sm-12行(第3个carousal)并向其添加元素。您将需要创建一个托管3个产品的组件,每个左/右按钮将在主要的托盘中循环。任何产品添加都将放入空组件中,一旦填充,将创建另一个实例来托管产品。

---下面的伪代码,用实际值自定义----

@Component( {} }
export class ProductsContainerComponent {
    products: Product[]

// template shows 3 products
}

@Component()
export class ProductCarousalComponent {
     carousal: ProductsContainerComponent[]

     btnPrevious, btnNext: Button => Each set the current pointer to a given container in list, which gets displayed

     addNewProduct() {
ProductsContainerComponent container;
carousal.each(prod => if (prod.products.length < 3) { container = prod; break; } );
if (container == null)
   {  container = new ProductsContainerComponent();  carousal.push (container); }

// construct your new product here (url, images, text etc)
container.products.push (new Product() );

}