#angular #typescript #angular-material
Вопрос:
<mat-form-field appearance="fill">
<mat-label>Select an option</mat-label>
<mat-select [(value)]="selected">
<mat-option>None</mat-option>
<mat-option value="option1">Option 1</mat-option>
<mat-option value="option2">Option 2</mat-option>
<mat-option value="option3">Option 3</mat-option>
</mat-select>
</mat-form-field>
<p>You selected: {{selected}}</p>
Я хотел бы вывести больше, чем вариант 1, 2, 3, три, если я выберу одно из этих значений.
Таким образом, должен появляться текст большего размера, чем. Поэтому я хотел бы выбрать абзац по номеру, а затем вывести весь абзац, если он выбран.
Как я мог этого достичь?
Ответ №1:
Вам нужно получить ваши абзацы и добавить все это в массив. Далее нужно использовать оператор *ngFor в шаблоне для повторения всего списка абзацев. Проверьте мой пример:
в шаблоне html
<mat-form-field appearance="fill">
<mat-label>Select</mat-label>
<mat-select>
<!-- // here is we doing iteration all of paragraphs -->
<ng-container *ngFor="let item of paragraphs">
<mat-option value="item?.line"> {{ item?.name }}</mat-option>
</ng-container>
</mat-select>
</mat-form-field>
<!-- increasing array length -->
<button mat-button (click)="addItems()"> Add Item</button>
и машинописный код
import {Component} from '@angular/core';
interface Paragraph {
line: number;
name: string;
};
/** @title Simple form field */
@Component({
selector: 'form-field-overview-example',
templateUrl: 'form-field-overview-example.html',
styleUrls: ['form-field-overview-example.css']
})
export class FormFieldOverviewExample {
paragraphs : Paragraph[] = [];
constructor () {
this.paragraphs = [
{ line: 1, name: 'P1'},
{ line: 2, name: 'P2'},
{ line: 3, name: 'P3'}
];
}
addItems() {
this.paragraphs.push( {line: this.paragraphs.length 1, name: 'P' (this.paragraphs.length 1)})
}
}
Комментарии:
1. Если вы хотите изучать угловой, я советую вам пройти мини-курс angular.io/tutorial Вот все, что вам нужно для разработки для начала
Ответ №2:
Как я понял ваш вопрос, цель здесь состоит в том, чтобы отобразить больший абзац под фактическим мат-выбором в зависимости от выбранного в данный момент значения. Для достижения этой цели существует несколько подходов. Поскольку вы используете не массив, а только html-шаблон, вы можете использовать директиву ngSwitchCase: https://angular.io/api/common/NgSwitchCase
Пример:
<mat-form-field appearance="fill">
<mat-label>Select an option</mat-label>
<mat-select [(value)]="selected">
<mat-option>None</mat-option>
<mat-option value="option1">Option 1</mat-option>
<mat-option value="option2">Option 2</mat-option>
<mat-option value="option3">Option 3</mat-option>
</mat-select>
</mat-form-field>
<div [ngSwitch]="selected">
<p *ngSwitchCase="'option1'">Your long text 1 here</p>
<p *ngSwitchCase="'option2'">Your long text 2 here</p>
<p *ngSwitchDefault>Text when nothing is selected.</p>
</div>