Как программно открыть Аккордеон в Angular 4 - PullRequest
0 голосов
/ 04 июня 2018

Я работаю в приложении Angular 4, в этом у меня один и тот же аккордеон в двух компонентах. Что я хочу сделать, если пользователь нажал на аккордеоне из первого компонента, я хочу получить индекс выбранного аккордеона и передатьэто второй компонент там я установил выбранный аккордеон, чтобы открыть и показать содержимое в нем при загрузке страницы (без щелчка по нему)

в настоящее время у меня есть один аккордеон в первом компоненте, если несколько API связывает из выбранного APIИндекс будет изменяться динамически.

Вот мой код:

https://stackblitz.com/edit/angular-bootstrap-carousel-dynamic2-tsrt1w?file=app%2Fone%2Fone.component.html

1 Ответ

0 голосов
/ 04 июня 2018

Вы можете передать идентификатор, используя параметры маршрута, посмотрите примеры кода ниже:

one.component.html

<h5>One Component</h5>
<h6>Categories</h6>
<div class="accordion col-sm-12" id="accordion1" *ngFor='let data of dropdownData; let i=index'>
    <div class="accordion-group">

        <div class="accordion-heading">
            <a class="accordion-toggle h6" data-toggle="collapse"  routerLink="/two/{{i}}" data-parent="#accordion1" href="#collapseTwo + i">
                {{data?.CAMD_ENTITY_DESC}}
            </a>
        </div>
    </div>
</div>
<br>

маршруты приложения

const appRoutes: Routes = [
      {path:'one',component:OneComponent},
       {path:'two/:id',component:TwoComponent}]

two.component.ts

import { Component, OnInit, ViewChildren, QueryList, AfterViewInit, ElementRef } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { CartdataServiceService } from '../cartdata-service.service';
declare var $:any;
@Component({
  selector: 'app-two',
  templateUrl: './two.component.html',
  styleUrls: ['./two.component.css']
})
export class TwoComponent implements OnInit,AfterViewInit {
dropdownData: any;
id:string;

@ViewChildren('accordian') components:QueryList<ElementRef>;
constructor( private route: ActivatedRoute, private CartdataService: CartdataServiceService) {}
 ngOnInit() {
    this.CartdataService.get_New_Products().subscribe(
      data => {
        this.dropdownData = data;
          console.log(this.dropdownData);        
      });

       this.id = this.route.snapshot.paramMap.get('id');
  }

  ngAfterViewInit(){
    // print array of CustomComponent objects

    this.components.changes.subscribe(() => {
      let elem=this.components.toArray()[this.id];

      $(elem.nativeElement).trigger("click");

     console.log(elem);
  });
}

}

Теперь вы можете использовать id и выбрать нужный индекс для аккордеона.

Пример ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...