Я пытаюсь реализовать функцию, которая будет отображать элементы в списке справа. Список заполняется в зависимости от выбора пользователя. Когда пользователь выбирает элемент из иерархии слева, он добавляется в список. Я хочу отобразить элементы справа.
slice.component.ts:
import { Component, Input, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
import * as API from '../../shared/api-routes';
import { BasestepComponent } from '../basestep-component/basestep.component';
import { Subject } from 'rxjs/Subject';
import html from './slice.component.html';
import css from './slice.component.css';
@Component({
selector: 'slice-component',
template: html,
providers: [DataService],
styles: [css],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class SliceComponent extends BasestepComponent<string> implements OnInit {
selections: string[] = [];
newList: string[];
constructor(dataService:DataService, cd:ChangeDetectorRef) {
super(dataService, cd);
}
ngOnInit() {
}
public onSliceChange(event:string):void {
this.newList = [];
this.selections.push(event);
this.newList = this.selections;
console.log(this.selections); //this has all the items selected
}
}
slice.component.html:
<fortune-select
(sliceSelected)="onSliceChange($event)">
</fortune-select>
<rightside-component
[sliceNodes]="newList">
</rightside-component>
rightside.component.ts:
import { Component, Input, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
import html from './rightside.component.html';
import css from './rightside.component.css';
@Component({
selector: 'rightside-component',
template: html,
providers: [DataService],
styles: [css],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class RightSideComponent implements OnInit {
@Input() sliceNodes: string[];
constructor(private cd: ChangeDetectorRef) {}
ngOnInit() {
}
getSlices() : string[] {
if (typeof(this.sliceNodes) == "undefined" || (this.sliceNodes) === null) {
return [];
}
return this.sliceNodes;
}
}
rightside.component.html:
<ul class="selection-list">
<li *ngFor="let item of sliceNodes">
<button class="btn" >
<i class="fa fa-close"> {{ item }} </i>
</button>
</li>
</ul>
В правостороннем компоненте присутствует только первый выбранный элемент, который отображается справа. Я вижу, что все выбранные элементы присутствуют в "this.newList" в slice.component.ts
Однако весь список не передается компоненту правых сторон. sliceNodes получает только первый элемент. Я хочу, чтобы все элементы в списке были перенесены.
Я использую ChangeDetectionStrategy.OnPush, поэтому он не распознает изменения, которых нет в @ Input.
Как мне это исправить? Любая помощь приветствуется!