2016-08-02 9 views
9

Mam ten kod w moim szablonu:Jak wyświetlić symbol zastępczy (pusta opcja) w kontrolce select w Angular 2?

<select [ngModel]="selectedSubSectionId" (ngModelChange)="onSubSectionChange($event)"> 
    <option *ngFor="let subSection of event.subSections" [ngValue]="subSection.id">{{ subSection.name }}</option> 
</select> 

W moim komponent:

public selectedSubSectionId: any; 

public onSubSectionChange(subSectionId: any) { 
    // some code I execute after ngModel changes. 
} 

to działa ok, ale na początku mam puste pole. Chcę pokazać tam wiadomość zastępczą. Jak mogę to zrobić, używając narzędzia ngModel?

Odpowiedz

14

Moje rozwiązanie:

W pliku składnik maszynopis dodaję selectUndefinedOptionValue właściwość, że nie zainicjować i html dodam undefinedSelectOptionValue jako wartości danej opcja zastępcza. To rozwiązanie działa zarówno dla właściwości liczbowych, jak i łańcuchowych.

@Component({ 
 
    selector: 'some-component-selector', 
 
    templateUrl:'url to template', 
 
}) 
 
export class SomeComponent implements OnInit { 
 
    private selectUndefinedOptionValue:any; 
 
    private someObject:SomeObject; 
 
    
 
    ngOnInit() { 
 
     someObject = new SomeObject(); 
 
    } 
 
}
<select [(ngModel)]="someObject.somePropertyId"> 
 
    <option disabled hidden [value]="selectUndefinedOptionValue">-- select --</option> 
 
    <option *ngFor="let option of options" [value]="option.id">option.text</option> 
 
</select>

+6

Działa również z [value] = "undefined". –

+1

@FranziskusKarsunke Ludzie, czy ktoś może wyjaśnić, jak działa ta magia? dzięki – mondayguy

+0

Nie działa to w wersji Chrome 60.0.3112.90, której używam do przeglądania fragmentu. – nclarx

-4

Czy próbowałeś wstawić placeholder="Your placeholder string" do znacznika wyboru lub opcji?

Zakładam, że ciąg znaków można zastąpić zmienną, jeśli nie chcesz, aby łańcuch był sztywny w widoku.

+0

to nie działa. – Leantraxxx

+0

Co z tym http://stackoverflow.com/questions/34183686/add-placeholder-to-select-tag-in-angular2 :) – Kriss

5

wypróbować ten kod:

<select [ngModel]="selectedSubSectionId? selectedSubSectionId : ''" (ngModelChange)="onSubSectionChange($event)"> 
    <option value="" disabled selected hidden>Placeholder</option> 
    <option *ngFor="let subSection of event.subSections" [value]="subSection.id">{{ subSection.name }}</option> 
</select> 
1

Dodaj pusty opcję i ustawiony na 'nieokreślony' może być również dodać do wartości zerowej zbyt

<select [(ngModel)]="barcode"> 
    <option value="undefined" disabled selected hidden>Select</option> 
    <option value="null" disabled selected hidden>Select</option> 
    <option *ngFor="let city of turkiye" [ngValue]="city.id">{{city.name}}</option> 
</select> 
+1

Uwaga: Safari i IE11 pokaże dwa wpisy z tym rozwiązaniem! –

4

mam to samo pytanie, a ja znalazłem przykład w ta wspaniała strona internetowa: Angular Quick Tip

również, umieszczam przykład poniżej:

// template 
<form #f="ngForm"> 
    <select name="state" [ngModel]="state"> 
    <option [ngValue]="null">Choose a state</option> 
    <option *ngFor="let state of states" [ngValue]="state"> 
     {{ state.name }} 
    </option> 
    </select> 
</form> 

//component 
state = null; 

states = [ 
    {name: 'Arizona', code: 'AZ'}, 
    {name: 'California', code: 'CA'}, 
    {name: 'Colorado', code: 'CO'} 
]; 

współpracuje także z reaktywnych form, to co używam:

// template 
<div class="form-group"> 
    <select formControlName="category"> 
    <option [ngValue]="null">Select Category</option> 
    <option *ngFor="let option of options" 
      [ngValue]="option">{{option.label}}</option> 
    </select> 
</div> 

// component 
options = [{ id: 1, label: 'Category One' }, { id: 2, label: 'Category Two' }]; 

form = new FormGroup({ 
    category: new FormControl(null, Validators.required) 
}); 

Dzięki Netanel Basal aby dostarczyć odpowiedzi

Powiązane problemy