/
githubmirror
/
components
Обзор
Документация
Войти
/
githubmirror
/
components
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/dev-app/select/select-demo.html
420 строк
16 KB
Kristiyan Kostadinov
refactor(multiple): switch button selectors
14 мар 2025, 09:04
14 мар 2025, 09:04
103ac7c
Код
Авторство
О чём код?
Space above cards: <input type="number" [formControl]="topHeightCtrl"> <button matButton (click)="showSelect=!showSelect">SHOW SELECT</button> <div [style.height.px]="topHeightCtrl.value"></div> <div class="demo-select"> <mat-card> <mat-card-subtitle>ngModel</mat-card-subtitle> <mat-card-content> <mat-form-field [floatLabel]="floatLabel" [color]="drinksTheme" [class.demo-drinks-width-large]="drinksWidth === '400px'"> <mat-label>Drink</mat-label> <mat-select [(ngModel)]="currentDrink" [required]="drinksRequired" [disabled]="drinksDisabled" #drinkControl="ngModel"> <mat-option [disabled]="drinksOptionsDisabled === 'all'">None</mat-option> @for (drink of drinks; track drink; let index = $index) { <mat-option [value]="drink.value" [disabled]="isDrinkOptionDisabled(index)"> {{ drink.viewValue }} </mat-option> } </mat-select> <mat-icon matPrefix class="demo-drink-icon">local_drink</mat-icon> <mat-hint>Pick a drink!</mat-hint> <mat-error>You must make a selection</mat-error> </mat-form-field> <p> Value: {{ currentDrink }} </p> <p> Touched: {{ drinkControl.touched }} </p> <p> Dirty: {{ drinkControl.dirty }} </p> <p> Status: {{ drinkControl.status }} </p> <p> <label for="floating-label">Floating label:</label> <select [(ngModel)]="floatLabel" id="floating-label"> <option value="auto">Auto</option> <option value="always">Always</option> <option value="never">Never</option> </select> </p> <p> <label for="drinks-width">Width:</label> <select [(ngModel)]="drinksWidth" id="drinks-width"> <option value="default">Default</option> <option value="400px">400px</option> </select> </p> <p> <label for="drinks-theme">Theme:</label> <select [(ngModel)]="drinksTheme" id="drinks-theme"> @for (theme of availableThemes; track theme) { <option [value]="theme.value">{{theme.name}}</option> } </select> </p> <p> <label for="drinks-disabled-options">Disabled options:</label> <select [(ngModel)]="drinksOptionsDisabled" id="drinks-disabled-options"> <option value="none">None</option> <option value="first-middle-last">Disable First, Middle, and Last Options</option> <option value="all">Disable All Options</option> </select> </p> <button matButton (click)="currentDrink='water-2'">SET VALUE</button> <button matButton (click)="drinksRequired=!drinksRequired">TOGGLE REQUIRED</button> <button matButton (click)="drinksDisabled=!drinksDisabled">TOGGLE DISABLED</button> <button matButton (click)="drinkControl.reset()">RESET</button> </mat-card-content> </mat-card> <mat-card> <mat-card-subtitle>Multiple selection</mat-card-subtitle> <mat-card-content> <mat-form-field [color]="pokemonTheme"> <mat-label>Pokemon</mat-label> <mat-select multiple [(ngModel)]="currentPokemon" [required]="pokemonRequired" [disabled]="pokemonDisabled" #pokemonControl="ngModel"> @for (creature of pokemon; track creature) { <mat-option [value]="creature.value" [disabled]="pokemonOptionsDisabled"> {{ creature.viewValue }} </mat-option> } </mat-select> </mat-form-field> <p> Value: {{ currentPokemon }} </p> <p> Touched: {{ pokemonControl.touched }} </p> <p> Dirty: {{ pokemonControl.dirty }} </p> <p> Status: {{ pokemonControl.status }} </p> <p> <label for="pokemon-theme">Theme:</label> <select [(ngModel)]="pokemonTheme" id="pokemon-theme"> @for (theme of availableThemes; track theme) { <option [value]="theme.value">{{ theme.name }}</option> } </select> </p> <button matButton (click)="setPokemonValue()">SET VALUE</button> <button matButton (click)="pokemonRequired=!pokemonRequired">TOGGLE REQUIRED</button> <button matButton (click)="pokemonDisabled=!pokemonDisabled">TOGGLE DISABLED</button> <button matButton (click)="pokemonOptionsDisabled=!pokemonOptionsDisabled">TOGGLE DISABLED OPTIONS</button> <button matButton (click)="pokemonControl.reset()">RESET</button> </mat-card-content> </mat-card> <mat-card> <mat-card-subtitle>Without Angular forms</mat-card-subtitle> <mat-card-content> <mat-form-field> <mat-label>Digimon</mat-label> <mat-select [(value)]="currentDigimon"> <mat-option>None</mat-option> @for (creature of digimon; track creature) { <mat-option [value]="creature.value">{{ creature.viewValue }}</mat-option> } </mat-select> </mat-form-field> <p>Value: {{ currentDigimon }}</p> <button matButton (click)="currentDigimon='pajiramon-3'">SET VALUE</button> <button matButton (click)="currentDigimon=''">RESET</button> </mat-card-content> </mat-card> <mat-card> <mat-card-subtitle>Option groups</mat-card-subtitle> <mat-card-content> <mat-form-field> <mat-label>Pokemon</mat-label> <mat-select [(ngModel)]="currentPokemonFromGroup"> @for (group of pokemonGroups; track group) { <mat-optgroup [label]="group.name" [disabled]="group.disabled"> @for (creature of group.pokemon; track creature) { <mat-option [value]="creature.value">{{ creature.viewValue }}</mat-option> } </mat-optgroup> } </mat-select> </mat-form-field> </mat-card-content> </mat-card> <mat-card> <mat-card-subtitle>compareWith</mat-card-subtitle> <mat-card-content> <mat-form-field [color]="drinksTheme"> <mat-label>Drink</mat-label> <mat-select [(ngModel)]="currentDrinkObject" [required]="drinkObjectRequired" [compareWith]="compareByValue ? compareDrinkObjectsByValue : compareByReference" #drinkObjectControl="ngModel"> @for (drink of drinks; track drink) { <mat-option [value]="drink" [disabled]="drink.disabled">{{ drink.viewValue }}</mat-option> } </mat-select> </mat-form-field> <p> Value: {{ currentDrinkObject | json }} </p> <p> Touched: {{ drinkObjectControl.touched }} </p> <p> Dirty: {{ drinkObjectControl.dirty }} </p> <p> Status: {{ drinkObjectControl.status }} </p> <p> Comparison Mode: {{ compareByValue ? 'VALUE' : 'REFERENCE' }} </p> <button matButton (click)="reassignDrinkByCopy()" matTooltip="This action should clear the display value when comparing by reference."> REASSIGN DRINK BY COPY </button> <button matButton (click)="drinkObjectRequired=!drinkObjectRequired">TOGGLE REQUIRED</button> <button matButton (click)="compareByValue=!compareByValue">TOGGLE COMPARE BY VALUE</button> <button matButton (click)="drinkObjectControl.reset()">RESET</button> </mat-card-content> </mat-card> <mat-card> <mat-card-subtitle>Appearance comparison</mat-card-subtitle> <mat-card-content> <p> <mat-form-field appearance="fill"> <mat-label>Fill</mat-label> <mat-select [(value)]="currentAppearanceValue"> <mat-option>None</mat-option> @for (creature of digimon; track creature) { <mat-option [value]="creature.value">{{ creature.viewValue }}</mat-option> } </mat-select> </mat-form-field> </p> <p> <mat-form-field appearance="outline"> <mat-label>Outline</mat-label> <mat-select [(value)]="currentAppearanceValue"> <mat-option>None</mat-option> @for (creature of digimon; track creature) { <mat-option [value]="creature.value">{{ creature.viewValue }}</mat-option> } </mat-select> </mat-form-field> </p> <button matButton (click)="toggleSelected()">TOGGLE SELECTED</button> </mat-card-content> </mat-card> @if (showSelect) { <div> <mat-card> <mat-card-subtitle>formControl</mat-card-subtitle> <mat-card-content> <mat-form-field> <mat-label>Food I would like to eat</mat-label> <mat-select [formControl]="foodControl"> @for (food of foods; track food) { <mat-option [value]="food.value">{{ food.viewValue }}</mat-option> } </mat-select> </mat-form-field> <p> Value: {{ foodControl.value }} </p> <p> Touched: {{ foodControl.touched }} </p> <p> Dirty: {{ foodControl.dirty }} </p> <p> Status: {{ foodControl.status }} </p> <button matButton (click)="foodControl.setValue('pizza-1')">SET VALUE</button> <button matButton (click)="toggleDisabled()">TOGGLE DISABLED</button> <button matButton (click)="foodControl.reset()">RESET</button> </mat-card-content> </mat-card> </div> } @if (showSelect) { <div> <mat-card> <mat-card-subtitle>Change event</mat-card-subtitle> <mat-card-content> <mat-form-field> <mat-label>Starter pokemon</mat-label> <mat-select (selectionChange)="latestChangeEvent = $event"> @for (creature of pokemon; track creature) { <mat-option [value]="creature.value">{{ creature.viewValue }}</mat-option> } </mat-select> </mat-form-field> <p> Change event value: {{ latestChangeEvent?.value }} </p> </mat-card-content> </mat-card> </div> } </div> <mat-card class="demo-card demo-basic"> <mat-card-content> <form> <h4>Basic</h4> <mat-form-field class="demo-full-width"> <mat-label>Select your car</mat-label> <select matNativeControl id="mySelectId"> <option value="" disabled selected></option> <option value="volvo">Volvo</option> <option value="saab" disabled>Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> </mat-form-field> <h4>Disabled and required</h4> <mat-form-field class="demo-full-width"> <mat-label>Select your car (disabled)</mat-label> <select matNativeControl disabled required> <option value="volvo">Volvo</option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> </mat-form-field> <h4>Floating label</h4> <mat-form-field> <mat-label>Float with value</mat-label> <select matNativeControl> <option value="volvo">Volvo</option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> </mat-form-field> <mat-form-field> <mat-label>Not float when empty</mat-label> <select matNativeControl> <option value="" selected></option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> </mat-form-field> <mat-form-field> <mat-label>Float with no value, but with label</mat-label> <select matNativeControl> <option value="" selected label="--select one--"></option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> </mat-form-field> <mat-form-field> <mat-label>Float with no value, but with html</mat-label> <select matNativeControl> <option value="" selected>--select one--</option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> </mat-form-field> <h4>Looks</h4> <mat-form-field appearance="fill"> <mat-label>Fill</mat-label> <select matNativeControl required> <option value="" selected></option> <option value="volvo">Volvo</option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> </mat-form-field> <mat-form-field appearance="outline"> <mat-label>Outline</mat-label> <select matNativeControl> <option value="" selected></option> <option value="volvo">volvo</option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> </mat-form-field> <h4>Option group</h4> <mat-form-field> <select matNativeControl> <optgroup label="Swedish Cars"> <option value="volvo">volvo</option> <option value="saab">Saab</option> </optgroup> <optgroup label="German Cars"> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </optgroup> </select> </mat-form-field> <h4>Error message, hint, form sumbit</h4> <mat-form-field class="demo-full-width"> <mat-label>Select your car (required)</mat-label> <select matNativeControl required [formControl]="selectFormControl"> <option label="--select something --"></option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> @if (selectFormControl.hasError('required')) { <mat-error>This field is required</mat-error> } <mat-hint>You can pick up your favorite car here</mat-hint> </mat-form-field> <h4>Error message with errorStateMatcher</h4> <mat-form-field class="demo-full-width"> <mat-label>Select your car</mat-label> <select matNativeControl required [formControl]="selectFormControl" [errorStateMatcher]="matcher"> <option label="--select something --"></option> <option value="saab">Saab</option> <option value="mercedes">Mercedes</option> <option value="audi">Audi</option> </select> @if (selectFormControl.hasError('required')) { <mat-error>This field is required</mat-error> } <mat-hint>You can pick up your favorite car here</mat-hint> </mat-form-field> <button color="primary" matButton="elevated">Submit</button> </form> </mat-card-content> </mat-card> <mat-card class="demo-card demo-narrow"> <mat-card-subtitle>Narrow</mat-card-subtitle> <mat-card-content> <p class="demo-narrow-sandwich"> <mat-form-field> <mat-label>Bread</mat-label> <mat-select [(ngModel)]="sandwichBread" [hideSingleSelectionIndicator]="sandwichHideSingleSelectionIndicator"> @for (bread of breads; track bread) { <mat-option [value]="bread.value">{{ bread.viewValue }}</mat-option> } </mat-select> </mat-form-field> <mat-form-field> <mat-label>Meat</mat-label> <mat-select [(ngModel)]="sandwichMeat" [hideSingleSelectionIndicator]="sandwichHideSingleSelectionIndicator"> @for (meat of meats; track meat) { <mat-option [value]="meat.value">{{ meat.viewValue }}</mat-option> } </mat-select> </mat-form-field> <mat-form-field> <mat-label>Cheese</mat-label> <mat-select [(ngModel)]="sandwichCheese" [hideSingleSelectionIndicator]="sandwichHideSingleSelectionIndicator"> @for (cheese of cheeses; track cheese) { <mat-option [value]="cheese.value">{{ cheese.viewValue }}</mat-option> } </mat-select> </mat-form-field> </p> <mat-checkbox [(ngModel)]="sandwichHideSingleSelectionIndicator"> Hide Single-Selection Indicator </mat-checkbox> </mat-card-content> </mat-card>