zoukankan      html  css  js  c++  java
  • ngx-bootstrap使用02 Accordion组件的使用

    1 Accordion组件

      该组件通过一个可折叠的控制面板在有限空间内显示更多的信息

      according组件在可折叠指令的最外层,该组件提供了一些列的项目列表去显示被折叠的内容,这些项目列表包含header和body,通过单击这些项目列表的header就可以让body实现关闭和打开效果,从而实现折叠内容的显示和关闭

      1.1 基本使用

        1.1.1 在模块级别导入AccordionModule

          

    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    
    import { AppComponent } from './app.component';
    import { TestComponent } from './test/test.component';
    
    import { AccordionModule } from 'ngx-bootstrap';
    
    @NgModule({
      declarations: [
        AppComponent,
        TestComponent
      ],
      imports: [
        BrowserModule,
        AccordionModule.forRoot()
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    View Code

        1.1.2 结构01

          在accordion组件内可以使用多个accordion-group组件

          技巧01:according-group的heading属性是用于指定面板的标题的,可以在accordion-group组件之内添加任意元素并标注上accordion-heading可以达到相同的效果

          技巧02:accordion-group里面还可以方accordion-group

        <accordion>
          <accordion-group heading="折叠标题01">
            折叠内容01
          </accordion-group>
          <accordion-group heading="折叠内容01">
            折叠内容02
          </accordion-group>
          <accordion-group>
            <span accordion-heading>折叠标题03</span>
            折叠内容03
          </accordion-group>
        </accordion>
    <div class="panel panel-primary">
      <div class="panel-heading">accordion结构01</div>
      <div class="panel-body">
        <accordion>
          <accordion-group heading="折叠标题01">
            折叠内容01
          </accordion-group>
          <accordion-group heading="折叠内容01">
            折叠内容02
          </accordion-group>
          <accordion-group>
            <span accordion-heading>折叠标题03</span>
            折叠内容03
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 09:25:43</div>
    </div>
    View Code

         1.1.3 结构02

          accordion-panel和accordion-group的用法一样

          技巧01:accordion-panel和accordion-group可以互相嵌套使用

        <accordion>
          <accordion-panel heading="折叠标题01">
            折叠内容01
          </accordion-panel>
          <accordion-panel heading="折叠标题02">
            折叠内容02
          </accordion-panel>
          <accordion-panel>
            <span accordion-heading>折叠标题03</span>
            折叠内容03
          </accordion-panel>
        </accordion>
    <div class="panel panel-primary">
      <div class="panel-heading">accordion结构02</div>
      <div class="panel-body">
        <accordion>
          <accordion-panel heading="折叠标题01">
            折叠内容01
          </accordion-panel>
          <accordion-panel heading="折叠标题02">
            折叠内容02
          </accordion-panel>
          <accordion-panel>
            <span accordion-heading>折叠标题03</span>
            折叠内容03
          </accordion-panel>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 09:36:59</div>
    </div>
    View Code

          

      1.2 利用其它元素作为accordion-group或者accordion-panel的header

        将accordion-heading属性用于accordion-group内部的任何元素上来代替according-group上的heading属性,那个标注有accordion-heading属性的元素会被当做accordion-group的header模板使用

        

    <div class="panel panel-primary">
      <div class="panel-heading">利用按钮作为标题</div>
      <div class="panel-body">
        <accordion>
          <accordion-group>
            <button accordion-heading  class="btn btn-primary">点击显示内容</button>
            <div>
              我是隐藏的内容
            </div>
          </accordion-group>
          <accordion-panel>
            <span accordion-heading class="glyphicon glyphicon-signal">&ngsp;信号强度</span>
            <div>
              这里的信号很好哟!
            </div>
          </accordion-panel>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 09:47:41</div>
    </div>
    View Code

      1.3 输入属性isDisabled

        如果accordiong-group的isDisabled属性值为真,那么accordion-group就会被锁定(通过单击来使得accordion-group展现和关闭会失效)

      

    <div class="panel panel-primary">
      <div class="panel-heading">accordion的disable属性</div>
      <div class="panel-body">
        <accordion>
          <button class="btn-primary" (click)="status.disable = !status.disable">Disable/Enable</button>
          <span *ngIf="status.disable">
            accordion-group的isDisabled属性为真,accordion-group已经被锁定
          </span>
          <accordion-group [isDisabled]="status.disable" >
            <span accordion-heading>折叠标题</span>
            <p>折叠内容</p>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 10:37:38</div>
    </div>
    HTML
    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-test',
      templateUrl: './test.component.html',
      styleUrls: ['./test.component.scss']
    })
    export class TestComponent implements OnInit {
      status: any;
    
      constructor() { }
    
      ngOnInit() {
        this.status = {
          disable: false
        };
      }
    
    }
    TS

      1.4 输入属性isOpen

        当accordion-group的isOpen属性为真时accordion-group折叠的内容会自动打开,反之会自动关闭

        <accordion>
          <button (click)="status.isopen = !status.isopen">isOpen</button>
          <span *ngIf="status.isopen">accordion-group的isOpen属性为真,折叠内容自动打开</span>
          <span *ngIf="!status.isopen">accordion-group的isOpen属性为假,折叠内容自动关闭</span>
          <accordion-group [isOpen]="status.isopen">
            <span accordion-heading>折叠标题</span>
              折叠内容
          </accordion-group>
        </accordion>
    <div class="panel panel-primary">
      <div class="panel-heading">accordion的isOpen属性</div>
      <div class="panel-body">
        <accordion>
          <button (click)="status.isopen = !status.isopen">isOpen</button>
          <span *ngIf="status.isopen">accordion-group的isOpen属性为真,折叠内容自动打开</span>
          <span *ngIf="!status.isopen">accordion-group的isOpen属性为假,折叠内容自动关闭</span>
          <accordion-group [isOpen]="status.isopen">
            <span accordion-heading>折叠标题</span>
              折叠内容
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 11:09:26</div>
    </div>
    View Code
    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-test',
      templateUrl: './test.component.html',
      styleUrls: ['./test.component.scss']
    })
    export class TestComponent implements OnInit {
      status: any;
    
      constructor() { }
    
      ngOnInit() {
        this.status = {
          disable: false,
          isopen: false
        };
      }
    
    }
    TS

        

      1.5 动态accordion

        1.5.1 利用for循环展现多个accordion-group

        

    <div class="panel panel-primary">
      <div class="panel-heading">利用循环展示多个accordion-group</div>
      <div class="panel-body">
        <accordion>
          <accordion-group *ngFor="let group of groups;">
            <span accordion-heading>{{group.header}}</span>
            <div>{{group.content}}</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 11:30:57</div>
    </div>
    HTML
    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-test',
      templateUrl: './test.component.html',
      styleUrls: ['./test.component.scss']
    })
    export class TestComponent implements OnInit {
      status: any;
      groups: Group[];
      group: Group = new Group('name', 'warrior');
    
      constructor() { }
    
      ngOnInit() {
        this.status = {
          disable: false,
          isopen: false
        };
    
        this.groups = [
          new Group('折叠标题01', '折叠内容01'),
          new Group('折叠标题02', '折叠内容02')
        ];
    
      }
    
    }
    
    export class Group {
      private _header: string;
      private _content: string;
    
      constructor(header: string, content: string) {
        this._header = header;
        this._content = content;
      }
    
      get header(): string {
        return this._header;
      }
    
      set header(value: string) {
        this._header = value;
      }
    
      get content(): string {
        return this._content;
      }
    
      set content(value: string) {
        this._content = value;
      }
    }
    TS

        1.5.2 动态添加accordion-group

          触发单击事件 -> 为groups列表添加一个元素 -> 利用*ngFor展现groups列表

         

    <div class="panel panel-primary">
      <div class="panel-heading">动态添加accordion-group</div>
      <div class="panel-body">
        <accordion>
          <button class="btn-primary" (click)="add()">
            添加accordion-group
          </button>
          <accordion-group *ngFor="let group of groups;">
            <span accordion-heading>{{group.header}}</span>
            <div>{{group.content}}</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 11:41:26</div>
    </div>
    HTML
    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-test',
      templateUrl: './test.component.html',
      styleUrls: ['./test.component.scss']
    })
    export class TestComponent implements OnInit {
      status: any;
      groups: Group[];
      group: Group = new Group('name', 'warrior');
    
      constructor() { }
    
      ngOnInit() {
        this.status = {
          disable: false,
          isopen: false
        };
    
        this.groups = [
          new Group('折叠标题01', '折叠内容01'),
          new Group('折叠标题02', '折叠内容02')
        ];
    
      }
    
      add() {
        this.groups = [...this.groups, new Group('折叠标题' + Math.random() * 100, '折叠内容' + Math.random() * 100)];
      }
    
    }
    
    export class Group {
      private _header: string;
      private _content: string;
    
      constructor(header: string, content: string) {
        this._header = header;
        this._content = content;
      }
    
      get header(): string {
        return this._header;
      }
    
      set header(value: string) {
        this._header = value;
      }
    
      get content(): string {
        return this._content;
      }
    
      set content(value: string) {
        this._content = value;
      }
    }
    TS

      1.6 属性closeOthers

        当accordion的closeOthers属性值为真时就只能在同一时间打开一个accordion-group,再打开第二个时第一个会自动关闭

    <div class="panel panel-primary">
      <div class="panel-heading">每次允许打开一个accordion-group</div>
      <div class="panel-body">
        <input type="checkbox" [(ngModel)]="oneAtTime" id="one" />
        <label for="one">开启oneAtTime功能</label>
        <span style="color: green;" *ngIf="oneAtTime">
          checkBox的值为: {{oneAtTime}}
        </span>
        <span style="color: red" *ngIf="!oneAtTime">
          checkBox的值为: {{oneAtTime}}
        </span>
        <accordion [closeOthers]="oneAtTime">
          <accordion-group *ngFor="let group of groups;">
            <span accordion-heading>{{group.header}}</span>
            <div>{{group.content}}</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 14:53:28</div>
    </div>
    HTML
    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-test',
      templateUrl: './test.component.html',
      styleUrls: ['./test.component.scss']
    })
    export class TestComponent implements OnInit {
      status: any;
      groups: Group[];
      oneAtTime = false;
    
      constructor() { }
    
      ngOnInit() {
        this.status = {
          disable: false,
          isopen: false
        };
    
        this.groups = [
          new Group('折叠标题01', '折叠内容01'),
          new Group('折叠标题02', '折叠内容02'),
          new Group('折叠标题03', '折叠内容03')
        ];
    
      }
    
      add() {
        this.groups = [...this.groups, new Group('折叠标题' + Math.random() * 100, '折叠内容' + Math.random() * 100)];
      }
    
    }
    
    export class Group {
      private _header: string;
      private _content: string;
    
      constructor(header: string, content: string) {
        this._header = header;
        this._content = content;
      }
    
      get header(): string {
        return this._header;
      }
    
      set header(value: string) {
        this._header = value;
      }
    
      get content(): string {
        return this._content;
      }
    
      set content(value: string) {
        this._content = value;
      }
    }
    TS

      1.7 输入属性panelClass

        当accordion-group的panelClass属性为bootstrap面板相关的样式类名时,according-group就会拥有对应的样式

        技巧01:boostrap的面板样式有 -> 去官网查看

          

        技巧02:panelClass = "panel-danger" 和 [panelClass]="panel-danger是有区别的

          panelClass = "panel-danger"  会将panel-danger直接当成panelClass的值

          [panelClass]="panel-danger 会到TS文件中去寻找名为panel-danger的变量,并将变量的值赋值给panelClass属性

        

    <div class="panel panel-primary">
      <div class="panel-heading">给accordion-group添加样式</div>
      <div class="panel-body">
        <accordion>
          <accordion-group>
            <span accordion-heading>折叠标题01</span>
            <div>折叠内容01</div>
          </accordion-group>
          <accordion-group [panelClass]="customClass">
            <span accordion-heading>折叠标题02</span>
            <div>折叠内容02</div>
          </accordion-group>
          <accordion-group panelClass="panel-danger">
            <span accordion-heading>折叠标题03</span>
            <div>折叠内容03</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 15:18:33</div>
    </div>
    HTML
    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-test',
      templateUrl: './test.component.html',
      styleUrls: ['./test.component.scss']
    })
    export class TestComponent implements OnInit {
      status: any;
      groups: Group[];
      oneAtTime = false;
      customClass = 'panel-success';
    
      constructor() { }
    
      ngOnInit() {
        this.status = {
          disable: false,
          isopen: false
        };
    
        this.groups = [
          new Group('折叠标题01', '折叠内容01'),
          new Group('折叠标题02', '折叠内容02'),
          new Group('折叠标题03', '折叠内容03')
        ];
    
      }
    
      add() {
        this.groups = [...this.groups, new Group('折叠标题' + Math.random() * 100, '折叠内容' + Math.random() * 100)];
      }
    
    }
    
    export class Group {
      private _header: string;
      private _content: string;
    
      constructor(header: string, content: string) {
        this._header = header;
        this._content = content;
      }
    
      get header(): string {
        return this._header;
      }
    
      set header(value: string) {
        this._header = value;
      }
    
      get content(): string {
        return this._content;
      }
    
      set content(value: string) {
        this._content = value;
      }
    }
    TS

      1.8 输出属性isOpenChange

        当accordion-group打开和关闭时都会触发isOpenChange事件,该事件的事件值是一个Boolean类型,打开时为true,关闭时为false

        

    <div class="panel panel-primary">
      <div class="panel-heading">给accordion-group添加样式</div>
      <div class="panel-body">
        <accordion >
          <accordion-group (isOpenChange)="onChange($event)">
            <span accordion-heading>折叠标题01</span>
            <div>折叠内容01</div>
          </accordion-group>
          <accordion-group [panelClass]="customClass">
            <span accordion-heading>折叠标题02</span>
            <div>折叠内容02</div>
          </accordion-group>
          <accordion-group panelClass="panel-danger">
            <span accordion-heading>折叠标题03</span>
            <div>折叠内容03</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 15:18:33</div>
    </div>
    HTML
    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-test',
      templateUrl: './test.component.html',
      styleUrls: ['./test.component.scss']
    })
    export class TestComponent implements OnInit {
      status: any;
      groups: Group[];
      oneAtTime = false;
      customClass = 'panel-success';
    
      constructor() { }
    
      ngOnInit() {
        this.status = {
          disable: false,
          isopen: false
        };
    
        this.groups = [
          new Group('折叠标题01', '折叠内容01'),
          new Group('折叠标题02', '折叠内容02'),
          new Group('折叠标题03', '折叠内容03')
        ];
    
      }
    
      add() {
        this.groups = [...this.groups, new Group('折叠标题' + Math.random() * 100, '折叠内容' + Math.random() * 100)];
      }
    
      onChange(event: any) {
        console.log(JSON.stringify(event));
      }
    
    }
    
    export class Group {
      private _header: string;
      private _content: string;
    
      constructor(header: string, content: string) {
        this._header = header;
        this._content = content;
      }
    
      get header(): string {
        return this._header;
      }
    
      set header(value: string) {
        this._header = value;
      }
    
      get content(): string {
        return this._content;
      }
    
      set content(value: string) {
        this._content = value;
      }
    }
    TS

      1.9 accordion组件使用demo源代码 

    <div class="panel panel-primary">
      <div class="panel-heading">accordion的disable属性</div>
      <div class="panel-body">
        <accordion>
          <button class="btn-primary" (click)="status.disable = !status.disable">Disable/Enable</button>
          <span *ngIf="status.disable">
            accordion-group的isDisabled属性为真,accordion-group已经被锁定
          </span>
          <accordion-group [isDisabled]="status.disable" >
            <span accordion-heading>折叠标题</span>
            <p>折叠内容</p>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 10:37:38</div>
    </div>
    
    <div class="panel panel-primary">
      <div class="panel-heading">accordion的isOpen属性</div>
      <div class="panel-body">
        <accordion>
          <button (click)="status.isopen = !status.isopen">isOpen</button>
          <span *ngIf="status.isopen">accordion-group的isOpen属性为真,折叠内容自动打开</span>
          <span *ngIf="!status.isopen">accordion-group的isOpen属性为假,折叠内容自动关闭</span>
          <accordion-group [isOpen]="status.isopen">
            <span accordion-heading>折叠标题</span>
            <div>
              折叠内容
            </div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 11:09:26</div>
    </div>
    
    <div class="panel panel-primary">
      <div class="panel-heading">利用循环展示多个accordion-group</div>
      <div class="panel-body">
        <accordion>
          <accordion-group *ngFor="let group of groups;">
            <span accordion-heading>{{group?.header}}</span>
            <div>{{group?.content}}</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 11:30:57</div>
    </div>
    
    <div class="panel panel-primary">
      <div class="panel-heading">动态添加accordion-group</div>
      <div class="panel-body">
        <accordion>
          <button class="btn-primary" (click)="add()">
            添加accordion-group
          </button>
          <accordion-group *ngFor="let group of groups;">
            <span accordion-heading>{{group.header}}</span>
            <div>{{group.content}}</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 11:41:26</div>
    </div>
    
    <div class="panel panel-primary">
      <div class="panel-heading">每次允许打开一个accordion-group</div>
      <div class="panel-body">
        <input type="checkbox" [(ngModel)]="oneAtTime" id="one" />
        <label for="one">开启oneAtTime功能</label>
        <span style="color: green;" *ngIf="oneAtTime">
          checkBox的值为: {{oneAtTime}}
        </span>
        <span style="color: red" *ngIf="!oneAtTime">
          checkBox的值为: {{oneAtTime}}
        </span>
        <accordion [closeOthers]="oneAtTime">
          <accordion-group *ngFor="let group of groups;">
            <span accordion-heading>{{group.header}}</span>
            <div>{{group.content}}</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 14:53:28</div>
    </div>
    
    <div class="panel panel-primary">
      <div class="panel-heading">给accordion-group添加样式</div>
      <div class="panel-body">
        <accordion >
          <accordion-group (isOpenChange)="onChange($event)">
            <span accordion-heading>折叠标题01</span>
            <div>折叠内容01</div>
          </accordion-group>
          <accordion-group [panelClass]="customClass">
            <span accordion-heading>折叠标题02</span>
            <div>折叠内容02</div>
          </accordion-group>
          <accordion-group panelClass="panel-danger">
            <span accordion-heading>折叠标题03</span>
            <div>折叠内容03</div>
          </accordion-group>
        </accordion>
      </div>
      <div class="panel-footer">2018-1-7 15:18:33</div>
    </div>
    
    <div class="panel panel-primary">
      <div class="panel-heading">面板标题</div>
      <div class="panel-body">面板内容</div>
      <div class="panel-footer">2018-1-7 11:36:30</div>
    </div>
    HTML
    import { Component, OnInit } from '@angular/core';
    
    @Component({
      selector: 'app-test',
      templateUrl: './test.component.html',
      styleUrls: ['./test.component.scss']
    })
    export class TestComponent implements OnInit {
      status: any;
      groups: Group[];
      oneAtTime = false;
      customClass = 'panel-success';
    
      constructor() { }
    
      ngOnInit() {
        this.status = {
          disable: false,
          isopen: false
        };
    
        this.groups = [
          new Group('折叠标题01', '折叠内容01'),
          new Group('折叠标题02', '折叠内容02'),
          new Group('折叠标题03', '折叠内容03')
        ];
    
      }
    
      add() {
        this.groups = [...this.groups, new Group('折叠标题' + Math.random() * 100, '折叠内容' + Math.random() * 100)];
      }
    
      onChange(event: any) {
        console.log(JSON.stringify(event));
      }
    
    }
    
    export class Group {
      private _header: string;
      private _content: string;
    
      constructor(header: string, content: string) {
        this._header = header;
        this._content = content;
      }
    
      get header(): string {
        return this._header;
      }
    
      set header(value: string) {
        this._header = value;
      }
    
      get content(): string {
        return this._content;
      }
    
      set content(value: string) {
        this._content = value;
      }
    }
    TS

      1.10 accordion官网使用教程

        点击前往

        

  • 相关阅读:
    Spring Boot 整合 Apache Ignite
    QuantumTunnel:Netty实现
    QuantumTunnel:内网穿透服务设计
    Java虚拟机
    LeetCode
    Java线程如何返回数据
    Java动态代理简单应用
    Java反射机制浅析
    数据结构之Heap (Java)
    JUnit4单元测试基础篇
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/8228200.html
Copyright © 2011-2022 走看看