Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

100 строки
2.5 KiB

  1. import {
  2. AfterContentInit,
  3. Component,
  4. ContentChildren,
  5. EventEmitter,
  6. Input,
  7. Output,
  8. QueryList
  9. } from '@angular/core';
  10. import {TabComponent} from '../tab/tab.component';
  11. @Component({
  12. selector: 'app-tabs',
  13. templateUrl: './tabs.component.html',
  14. styleUrls: ['./tabs.component.scss']
  15. })
  16. export class TabsComponent implements AfterContentInit {
  17. @ContentChildren(TabComponent) tabs: QueryList<TabComponent>;
  18. @Input() notifyOnChange = false;
  19. @Output() onChange: EventEmitter<number> = new EventEmitter<number>();
  20. constructor() { }
  21. /**
  22. * After content children are set
  23. */
  24. public ngAfterContentInit(): void {
  25. // get all active tabs
  26. const activeTabs = this.tabs.filter((tab) => tab.active);
  27. // if there is no active tab set, activate the first
  28. if (activeTabs.length === 0) {
  29. this.setSelectedTabIndex(0);
  30. }
  31. }
  32. /**
  33. * Eventlistener for tab change
  34. * @param {TabComponent} tab
  35. */
  36. public selectTab(tab: TabComponent): void {
  37. if (!tab.disabled) {
  38. if (this.notifyOnChange) {
  39. this.onChange.emit(tab.index);
  40. } else {
  41. this.setSelectedTabIndex(tab.index);
  42. }
  43. }
  44. }
  45. /**
  46. * Sets selected tab by given
  47. * @param {number} i
  48. */
  49. public setSelectedTabIndex(i: number): void {
  50. if (this.tabs != null) {
  51. const tabsArray: TabComponent[] = this.tabs.toArray();
  52. if (i < tabsArray.length) {
  53. // Deactivate all tabs
  54. tabsArray.forEach(tab => tab.active = false);
  55. // Activate the tab the user has clicked on.
  56. tabsArray[i].active = true;
  57. }
  58. }
  59. }
  60. /**
  61. * Disable tab at given index
  62. * @param {number} i
  63. */
  64. public disableTabIndex(i: number): void {
  65. this.toggleTabIndex(i, false);
  66. }
  67. /**
  68. * Enable tab at given index
  69. * @param {number} i
  70. */
  71. public enableTabIndex(i: number): void {
  72. this.toggleTabIndex(i, true);
  73. }
  74. /**
  75. * Sets selected tab disabled/enabled
  76. * @param {number} i
  77. * @param {boolean} enable
  78. */
  79. private toggleTabIndex(i: number, enable: boolean): void {
  80. if (this.tabs != null) {
  81. const tabsArray: TabComponent[] = this.tabs.toArray();
  82. if (i < tabsArray.length) {
  83. tabsArray[i].disabled = !enable;
  84. }
  85. }
  86. }
  87. }