Wie zu verwenden ngModel mit einem benutzerdefinierten Steuerelement in einem Formular?
Erstellte ich eine Komponente für die Handhabung von select box, jetzt wenn ich es im form-tag nach der vorgelegten form das Ergebnis der Auswahl nicht zeigen, bis in der Konsole.
Was ist das problem mit meinem code? wie kann ich dieses Problem beheben?
- testOption: ist das array-Objekt das ich übergeben, werfen Sie die select-box mit
@Input
.
hier ist die select-box-Komponente:
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'input-select',
template:`
<div class="field-select">
<span><icon name="select-arrow" size="10"></icon></span>
<select name="{{name}}" class="field">
<option value="0" disabled selected>{{label}}</option>
<option *ngFor="let option of options" [ngValue]="option.value">{{option.name}}</option>
</select>
</div>
`
})
export class InputSelectComponent implements OnInit {
@Input() label: string;
@Input() name: string;
@Input() options;
//testOptions = [
// {value:'test',name:'test2'},
// {value:'test',name:'test2'}
//];
constructor() { }
ngOnInit() {
console.log(this.options);
}
}
Verwendung in html:
<input-select label="test" name="select2" [options]="testOption"></input-select>
form html:
<form role="form" class="form" #f="ngForm" (ngSubmit)="onSubmit(f)">
<input class="field" name="name" ngModel type="text" placeholder="n1">
<input-select label="b2" name="select2" [options]="testObject"></input-select>
<input class="field" name="building-type" type="text" ngModel placeholder="b3">
</form>
console log: (es gibt keine select-box-Wert)
Object {name: "test", building-type: "tset" }
Sie sprechen über
der richtige name ist testOption. my bad 🙂
Zeigen Sie Ihre "Eltern" - Komponente, bitte. (Vorlage)
Es meldet
ich aktualisiert die Frage.
testOption
und testObject
. Was ist der richtige name? 🙂 Überprüfen Sie, dass die erste..der richtige name ist testOption. my bad 🙂
Zeigen Sie Ihre "Eltern" - Komponente, bitte. (Vorlage)
Es meldet
undefined
auf der Konsole? was meinst du mit result of selection
. Ich sehe nicht ein, jeden code, drucken Sie das Ergebnis auf die Konsole. 🙂ich aktualisiert die Frage.
InformationsquelleAutor Sajad | 2017-01-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, ich habe Ihr problem jetzt.
Die Sie umsetzen wollen
ControlValueAccessor
auf Ihrer benutzerdefinierten Komponente zu verwenden, es in eine form mitngModel
!?Ihre Komponente sollte so Aussehen:
live-demo: https://plnkr.co/edit/imCJmCoJaeGQiUMcyBwz?p=preview
UPDATE
Erkennung von pegelwechseln im Formular-Komponente:
registerOnChange
Funktion in einer anderen Komponente?Warum sollten Sie das tun? 🙂 Was wollen Sie erreichen?
Ich will erkennen, ändern der select-box mit verschiedenen Komponenten und und auch mit verschiedenen Objekt. im Grunde möchte ich verwenden
registerOnChange
Funktion.Sie sollten nicht verwenden diese Funktionen.. Siehe meine aktualisierte Antwort für change-detection. Das ist genauso wie mit den anderen Formular-Eingaben mithilfe
ngModel
.Hi @mxii ich Frage mich, warum ist die controlvalueaccessor Methode verwendet statt eines anderen Typs der Komponente Kommunikation? wie Dienstleistungen oder viewchild oder ein-und Ausgänge. Können Sie erläutern, wie auf diese Frage? vielleicht sollte ich das einfach als eine Frage.
InformationsquelleAutor mxii
versuchen
[value]="option.value"
, btw konnte Sie zeigen, dass Ihre Konsole zuInformationsquelleAutor Tiep Phan
Haben Sie zu binden ngModel als eines der Attribute in Ihrem Selektor an.dann drucken Sie die ngModel Wert in Ihrer Konsole.
EXCEPTION: Uncaught (in promise): Error: No value accessor for form control with name: 'select2'
Sie müssen, um Formulare in Ihrem Selektor an. import {FormGroup} '@eckig/Formulare'.
InformationsquelleAutor Muthupriya