4

Haben Sie ein Problem mit ngModel in angular 2. Haben Sie eine Aufgabe, ein paar Eingaben von einem Array in der Komponentenklasse auszugeben. Es wurde eine Möglichkeit gefunden, dass ngModel seinen Wert aus dem [name] -Attribut nimmt, ohne ngModel in [()] zu umfassen. Und ich frage mich, ob es eine Möglichkeit gibt, diesen Eingaben einen Standardwert zuzuweisen.Einstellung ngModel Standardwert angular 2

personal-details.component.ts:

import { 
    Component, 
} from '@angular/core'; 

import { Input }from './Input' 

@Component({ 
    selector: 'personal-details', 
    styleUrls: ['personal-details.component.sass'], 
    templateUrl: 'personal-details.component.html' 
}) 
export class PersonalDetailsComponent { 
    title: string; 
    inputs: Input[] = [ 
     new Input('Name', 'text', 'Name', true, true), 
     new Input('Surname', 'text', 'Surname', true, true), 
     new Input('Mobile phone Number', 'text', 'phone', true, true), 
     new Input('Date of Birth', 'text', 'birthday', false, true), 
     new Input('Title', 'text', 'title', false, false), 
     new Input('Title after name', 'text', 'title-after-name', false,  false), 
     new Input('Personal number', 'text', 'personal-number', false, false), 
     new Input('National ID/Passport number', 'text', 'personal-id', false, true), 
    ]; 
    save = function (form) { 
     console.log(form); 
    } 
    constructor(){ 
     this.title = 'someName'; 
    } 
} 

Hier `s meine Vorlage:

<h4 class="profile__title">Personal Details</h4> 
<form #personalDetails="ngForm" (ngSubmit)="save(personalDetails.value)"> 
    <div layout="row" flex-wrap> 
     <div class="profile__input-wrapper" *ngFor="let input of inputs" flex="33"> 
      <md-input-container class="profile__input-container"> 
       <input md-input 
        [placeholder]="input.placeholder" 
        [type]="input.type" 
        [name]="input.name" 
        [disabled]="input.isDisabled" 
        [required]="input.isRequired" 
        ngModel> 
      </md-input-container> 
     </div> 
    </div> 
    <profile-footer ></profile-footer> 
</form> 

versuchten einige andere Ansätze sie mit ngFor aufzulisten, ohne Erfolg.

Antwort

1

Die einfache Art und Weise ngModel mit Einweg verwenden würde verbindlich

<input md-input 
    [placeholder]="input.placeholder" 
    [type]="input.type" 
    [name]="input.name" 
    [disabled]="input.isDisabled" 
    [required]="input.isRequired" 
    [ngModel]="input.value"> 

Es würde den Anfangswert an die Eingabe übergeben, ohne auf Ereignisse zu reagieren und Änderungen an das Modell zurückzuleiten.

1

Es sollte so einfach sein wie auf den Wert Attribut Bindung:

durch Hinzufügen ngModel = "
[ngValue]="input.intitialValue" 
+0

Danke für die Antwort! [ngValue] gibt einen Syntaxfehler zurück. [Wert] scheint gültig zu sein, zeigt aber kein Ergebnis in der tatsächlichen Ansicht. Obwohl ng-reflect-value = "1" in DOM erschienen ist. –

1

löste die Ausgabe {{input:

[value]="input.intitialValue" 

oder wenn das nicht funktioniert. default}}“

+0

Oh, Duh! Ich habe übersehen, dass Sie eine unidirektionale Bindung an ngModel (wenn Sie ngModel ausführen) selbst machen. Sie haben es also in Zweiwege-Datenbindung geändert, und das funktioniert. Sill vermisse meinerseits. –

Verwandte Themen