Ich versuche, eine Chipkomponente zu meiner Angular Webanwendung hinzuzufügen. Es ist in Typescript-, HTML- und CSS-Dateien geschrieben.Eine Chipkomponente in Angular 4 mit Typoskript hinzufügen
Ich habe seit ein paar Wochen gekämpft, um es richtig zu machen und habe nicht die richtige Lösung gefunden.
Hier ist ein Plunkr mit meinem aktuellen Code: https://plnkr.co/edit/zvEP9BOktwk6nBojsZQT?p=catalogue
UPDATE: ich meinen Code bearbeitet haben zu reflektieren, dass ich einen Eingang lese, die ein String-Array ist, ausgewählt genannt. Ich gebe ein String-Array namens code aus.
Unten ist der Code, mit denen ich arbeite:
import {
Component, Input, HostBinding, ElementRef, ViewChild, HostListener, EventEmitter, Output, OnInit, SimpleChanges,
OnChanges, QueryList, TemplateRef, ContentChildren, Directive
} from '@angular/core';
import {ControlValueAccessor} from '@angular/forms';
import {Subject} from "@reactivex/rxjs/dist/es6/Subject";
@Component({
selector: 'chips',
templateUrl: './chips.component.html',
styleUrls: ['./chips.component.scss']
})
export class ChipsComponent implements ControlValueAccessor, OnInit{
@Output() code: string[];
@Input() type = 'text';
@Input() duplicates = false;
@Input() selected: any[];
chips: ['chip1', 'chip2', 'chip3']
chipItemList: any[];
constructor() {
}
ngOnInit() {
console.log("selected in chips component ngOnInit(): " + this.selected);
console.log("code in chips component ngOnInit: " + this.code);
}
addChip($event){
this.selected.push($event.target.value)
$event.target.value = '';
}
/*addChip(addSelectedCode) {
//this.newChips.next(this.addCode);
console.log("addCode in chips component addChip(): " + this.addSelectedCode);
if (!this.chip || !this.duplicates && this.selected.indexOf(this.chip) !== -1) return;
this.selected.push(this.chip);
this.chip = null;
this.propagateChange(this.selected);
this.selectedCodeOutput = this.addSelectedCode;
console.log("selectedCodeOutput in chips component: " + this.selectedCodeOutput);
} */
remove(index: number) {
//this.addSelectedCode.splice(index, 1);
this.propagateChange(this.selected);
this.selectedCodeOutput = this.addSelectedCode;
}
/*
Form Control Value Accessor
*/
writeValue(value: any) {
if (value !== undefined) this.selected = value;
}
propagateChange = (_: any) => {
};
registerOnChange(fn: any) {
this.propagateChange = fn;
}
registerOnTouched() {
}
}
Ich glaube, das Problem ist, dass ich nicht in der Lage bin zu meiner Kind-Komponente aus meinen Eltern Vorlage zu nennen.
Hat jemand einen hilfreichen Ratschlag, um die Chipkomponente zum Hinzufügen von Chips zu bekommen?
Vielen Dank!
wenn selectedCodeOutput ist Ihr @Output(), wie kommt es versuchen Sie es in ngOnInit() Funktion anmelden? Welchen Wert siehst du da? Wenn Sie eine Ausgabe erstellen, um mit der übergeordneten Komponente zu sprechen, werden sie normalerweise als Ereignisemitter des Winkels festgelegt und geben einen bestimmten Typ aus. –
Vielen Dank für Ihre Antwort. Ich versuche, es zu protokollieren, um zu sehen, was es enthält. Es kommt tatsächlich nicht einmal zu ngOnInit in meiner Chip-Komponente. Ich habe versucht, einen EventEmitter zu verwenden, aber es brachte nicht das gewünschte Ergebnis. –
haben Sie Ihre chipsComponent zum Deklarationsarray des App-Moduls hinzugefügt? Wenn Sie @Output() verwenden, bedeutet dies im Wesentlichen, dass das untergeordnete Element den übergeordneten Benutzer über Änderungen benachrichtigt. In der Service-Alert-Komponente rufen Sie das Kind mit seinen Selektor- "Chips" an. Ein Fehler, den Sie hören (addSelectedCode), aber Sie richten ihn nicht auf einen bestimmten Zweck aus. Sie möchten etwas arbeiten, am besten mit einer Funktion, wenn eine Ausgabe vom Kind vorliegt. etw so (addSelectedCode) = "onSelectedCodeAddition ($ event)". Haben Sie die Service-Alert-Komponente im App-Modul deklariert? –