Guest User

Untitled

a guest
Oct 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. import { Component, NgModule, VERSION } from '@angular/core';
  2. import { BrowserModule } from '@angular/platform-browser';
  3.  
  4. @Component({
  5. selector: 'accordeon-div',
  6. template: `
  7. <div [ngClass]="{ 'selected': selected }" (click)="select($event.target)">
  8. </div>
  9. `,
  10. styles: [`
  11. .selected {
  12. border: 1px red solid;
  13. }
  14. div {
  15. border: 1px black solid;
  16. width: 30px;
  17. height: 30px;
  18. }
  19. `]
  20. })
  21. export class AccordeonDiv {
  22. name: string;
  23. selected: boolean = false;
  24.  
  25. constructor() {
  26. this.name = `Angular! v${VERSION.full}`;
  27. }
  28.  
  29. select(element: HTMLElement) {
  30. this.selected = !this.selected;
  31. }
  32. }
  33.  
  34. //our root app component
  35. import { Component, NgModule, VERSION } from '@angular/core';
  36. import { BrowserModule } from '@angular/platform-browser';
  37. import { AccordeonDiv } from './accordeon-div.component'
  38.  
  39. @Component({
  40. selector: 'my-app',
  41. template: `
  42. <div *ngFor="let number of numbers">
  43. <accordeon-div></accordeon-div>
  44. </div>
  45. `,
  46. styles: []
  47. })
  48. export class App {
  49. constructor() {
  50. this.numbers = Array(5).fill().map((x,i)=>i); // [0,1,2,3,4]
  51. this.name = `Angular! v${VERSION.full}`;
  52. }
  53. }
  54.  
  55. @NgModule({
  56. imports: [BrowserModule],
  57. declarations: [App, AccordeonDiv],
  58. bootstrap: [App],
  59. })
  60. export class AppModule {}
  61.  
  62. //our root app component
  63. import { Component, NgModule, VERSION, EventEmitter, Output } from '@angular/core';
  64. import { BrowserModule } from '@angular/platform-browser';
  65.  
  66. @Component({
  67. selector: 'accordeon-div',
  68. template: `
  69. <div [ngClass]="{ 'selected': selected }" (click)="select($event.target)">
  70. </div>
  71. `,
  72. styles: [`
  73. .selected {
  74. border: 1px red solid;
  75. }
  76. div {
  77. border: 1px black solid;
  78. width: 30px;
  79. height: 30px;
  80. }
  81. `]
  82. })
  83. export class AccordeonDiv {
  84. name: string;
  85. selected: boolean = false;
  86. eventSelected: EventEmitter = new EventEmitter<AccordeonDiv>();
  87.  
  88. constructor() {
  89. this.name = `Angular! v${VERSION.full}`;
  90. }
  91.  
  92. select(element: HTMLElement) {
  93. this.selected = !this.selected;
  94. this.eventSelected.emit(this);
  95. }
  96. }
  97.  
  98. //our root app component
  99. import { Component, NgModule, VERSION, ViewChildren, AfterViewInit } from '@angular/core';
  100. import { BrowserModule } from '@angular/platform-browser';
  101. import { AccordeonDiv } from './accordeon-div.component'
  102.  
  103. @Component({
  104. selector: 'my-app',
  105. template: `
  106. <div *ngFor="let number of numbers">
  107. <accordeon-div></accordeon-div>
  108. </div>
  109. `,
  110. styles: []
  111. })
  112. export class App implements AfterViewInit {
  113. @ViewChildren(AccordeonDiv) childs: QueryList<AccordeonDiv>;
  114. constructor() {
  115. this.numbers = Array(5).fill().map((x,i)=>i); // [0,1,2,3,4]
  116. this.name = `Angular! v${VERSION.full}`;
  117. }
  118.  
  119. ngAfterViewInit() {
  120. this.childs.forEach((item: AccordeonDiv) => { item.eventSelected.subscribe(selected => this.unselect(selected)) });
  121. }
  122.  
  123. unselect(selected) {
  124. this.childs.forEach((item) => { if (item !== selected) item.selected = false; });
  125. }
  126. }
Add Comment
Please, Sign In to add comment