Брошено, если экземпляр виртуальной машины Java или экземпляр ClassLoader пытается загрузить в определении класса (как часть обычного вызова метода или как часть создания нового экземпляра с использованием нового выражения), и определение класса не может быть найдено.
blockquote>Вы должны использовать версию downgrade
9.0.0
вместо9.2.1
compile 'com.google.android.gms:play-services:9.0.0'
И добавить multidex
compile 'com.android.support:multidex:1.0.1'
Надеемся на эту помощь.
отлично работает, как показано ниже:
<select class="form-control" id="selectTipoDocumento" formControlName="tipoDocumento" [compareWith]="equals"
[class.is-valid]="this.docForm.controls['tipoDocumento'].valid &&
(this.docForm.controls['tipoDocumento'].touched || this.docForm.controls['tipoDocumento'].dirty)"
[class.is-invalid]="!this.docForm.controls['tipoDocumento'].valid &&
(this.docForm.controls['tipoDocumento'].touched || this.docForm.controls['tipoDocumento'].dirty)">
<option value="">Selecione um tipo</option>
<option *ngFor="let tipo of tiposDocumento" [ngValue]="tipo">{{tipo?.nome}}</option>
</select>
Вы можете сделать этот путь
<option *ngFor="let workout of workouts" [value]="workout.name">{{workout.name}}</option>
или этот путь
<option *ngFor="let workout of workouts" [attr.value]="workout.name" [attr.selected]="workout.name == 'leg' ? true : null">{{workout.name}}</option>
, или вы можете установить глухой эффект таким образом
<option [value]="null">Please Select</option>
<option *ngFor="let workout of workouts" [value]="workout.name">{{workout.name}}</option>
или
<option [value]="0">Please Select</option>
<option *ngFor="let workout of workouts" [value]="workout.name">{{workout.name}}</option>
Полностью сглаживая другие сообщения, вот что работает в ускоренном запуске Angular2,
Чтобы установить значение DOM по умолчанию: вместе с *ngFor
используйте условный оператор в <option>
selected
attribute.
Чтобы установить Control
по умолчанию: используйте его аргумент конструктора. В противном случае перед обменом, когда пользователь повторно выбирает параметр, который устанавливает значение элемента управления с атрибутом значения выбранного параметра, значение управления будет равно null.
script:
import {ControlGroup,Control} from '@angular/common';
...
export class MyComponent{
myForm: ControlGroup;
myArray: Array<Object> = [obj1,obj2,obj3];
myDefault: Object = myArray[1]; //or obj2
ngOnInit(){ //override
this.myForm = new ControlGroup({'myDropdown': new Control(this.myDefault)});
}
myOnSubmit(){
console.log(this.myForm.value.myDropdown); //returns the control's value
}
}
разметка:
<form [ngFormModel]="myForm" (ngSubmit)="myOnSubmit()">
<select ngControl="myDropdown">
<option *ngFor="let eachObj of myArray" selected="eachObj==={{myDefault}}"
value="{{eachObj}}">{{eachObj.myText}}</option>
</select>
<br>
<button type="submit">Save</button>
</form>
Если вы не хотите привязку 2-way через [(ngModel)], сделайте следующее:
<select (change)="selectedAccountName = $event.target.value">
<option *ngFor="let acct of accountsList" [ngValue]="acct">{{ acct.name }}</option>
</select>
Просто протестировав мой проект на Angular 4, он работает! AccountList - это массив объектов Account, в которых имя является свойством Account.
Интересное наблюдение: [ngValue] = "acct" оказывает тот же результат, что и [ngValue] = "acct.name". Не знаю, как это делает Угловой 4!
Добавьте привязку к свойству selected
, например:
<option *ngFor="#workout of workouts" [selected]="workout.name == 'back'">{{workout.name}}</option>
[(ngModel)]
, поэтому он прослушивает привязку [selected]
в plnkr, а не в кодогенезе OP (см. Мой ответ для ссылки на раздвоенный plnr что объясняет этот эффект)
– Matthijs
20 April 2016 в 09:00
selected="workout.name == 'back'"
Использование активных форм: [selected]=workout.name == 'back'
– fidev
7 August 2017 в 14:53
Если вы присваиваете значение по умолчанию selectedWorkout
и используете [ngValue]
(что позволяет использовать объекты в качестве значения - иначе поддерживается только строка), то он должен просто делать то, что вы хотите:
<select class="form-control" name="sel"
[(ngModel)]="selectedWorkout"
(ngModelChange)="updateWorkout($event)">
<option *ngFor="let workout of workouts" [ngValue]="workout">
{{workout.name}}
</option>
</select>
Убедитесь, что значение, которое вы назначили selectedWorkout
, совпадает с тем, что было использовано в workouts
. Другой экземпляр объекта даже с теми же свойствами и значениями не будет распознаваться. Проверяется только идентификация объекта.
update
Угловая добавленная поддержка для compareWith
, что упрощает установку значения по умолчанию, когда используется [ngValue]
(для значений объекта)
Из документов https://angular.io/api/forms/SelectControlValueAccessor
blockquote><select [compareWith]="compareFn" [(ngModel)]="selectedCountries"> <option *ngFor="let country of countries" [ngValue]="country"> {{country.name}} </option> </select>
< / blockquote>compareFn(c1: Country, c2: Country): boolean { return c1 && c2 ? c1.id === c2.id : c1 === c2; }
Таким образом, в качестве значения по умолчанию может быть задан другой (новый) экземпляр объекта, а
compareFn
используется, чтобы выяснить, должны ли они считаться равными (например, если свойствоid
совпадает с
[value]
вместо [ngValue]
, или ваш код каким-то образом вызывает преобразование значения в строку.
– Günter Zöchbauer
2 November 2016 в 17:06
c1
и c2
в compareFn
? А также, как работает оценка в функциональном теле?
– DongBin Kim
19 March 2018 в 04:47
В соответствии с https://angular.io/api/forms/SelectControlValueAccessor вам просто нужно следующее:
theView.html:
<select [compareWith]="compareFn" [(ngModel)]="selectedCountries">
<option *ngFor="let country of countries" [ngValue]="country">
{{country.name}}
</option>
</select>
theComponent.ts
import { SelectControlValueAccessor } from '@angular/forms';
compareFn(c1: Country, c2: Country): boolean {
return c1 && c2 ? c1.id === c2.id : c1 === c2;
}
Добавить свойство связывания выбрано, но обязательно сделайте его нулевым для других полей, например:
<option *ngFor="#workout of workouts" [selected]="workout.name =='back' ? true: null">{{workout.name}}</option>
Теперь он будет работать
Повлиял немного с этим, но в итоге получилось следующее решение ... возможно, это поможет кому-то.
HTML-шаблон:
<select (change)="onValueChanged($event.target)">
<option *ngFor="let option of uifOptions" [value]="option.value" [selected]="option == uifSelected ? true : false">{{option.text}}</option>
</select>
Компонент:
import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
export class UifDropdownComponent implements OnInit {
@Input() uifOptions: {value: string, text: string}[];
@Input() uifSelectedValue: string = '';
@Output() uifSelectedValueChange:EventEmitter<string> = new EventEmitter<string>();
uifSelected: {value: string, text: string} = {'value':'', 'text':''};
constructor() { }
onValueChanged(target: HTMLSelectElement):void {
this.uifSelectedValue = target.value;
this.uifSelectedValueChange.emit(this.uifSelectedValue);
}
ngOnInit() {
this.uifSelected = this.uifOptions.filter(o => o.value ==
this.uifSelectedValue)[0];
}
}
Добавьте этот код в положение o списка выбора.
<option [ngValue]="undefined" selected>Select</option>
просто установите для модели значение по умолчанию, которое вы хотите:
selectedWorkout = 'back'
Я создал вилку @Douglas 'plnkr здесь , чтобы продемонстрировать различные способы для получения желаемого поведения в угловом2.
<select [(ngModel)]="selectedTimeFrame"> <option *ngFor="let val of timeFrames" [ngValue]="val">val</option> </select>
– S. Robijns
11 April 2017 в 11:29
Вы можете сделать так, как указано выше:
<select class="form-control"
[(ngModel)]="selectedWorkout"
(ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts;
let itemIndex = index"
[attr.selected]="itemIndex == 0">
{{workout.name}}
</option>
</select>
В приведенном выше коде, как вы можете видеть, выбранный атрибут параметра повторения задается при проверке индекса повторяющегося цикла списка. . [Атр & л; Имя атрибута html>] используется для установки атрибута html в угловом2.
Другим подходом будет установка значения модели в файле машинописных файлов как:
this.selectedWorkout = this.workouts.length > 0
? this.workouts[0].name
: 'No data found';//'arm'
Шаг: 1 Создать свойства declare class
blockquote>export class Task { title: string; priority: Array<any>; comment: string; constructor() { this.title = ''; this.priority = []; this.comment = ''; } }
Строка: 2 Ваш компонентный класс
blockquote>import { Task } from './task'; export class TaskComponent implements OnInit { priorityList: Array<any> = [ { value: 0, label: '✪' }, { value: 1, label: '★' }, { value: 2, label: '★★' }, { value: 3, label: '★★★' }, { value: 4, label: '★★★★' }, { value: 5, label: '★★★★★' } ]; taskModel: Task = new Task(); constructor(private taskService: TaskService) { } ngOnInit() { this.taskModel.priority = [3]; // index number } }
Шаг: 3 Просмотр файла .html
blockquote><select class="form-control" name="priority" [(ngModel)]="taskModel.priority" required> <option *ngFor="let list of priorityList" [value]="list.value"> {{list.label}} </option> </select>
Выход:
blockquote>
Я столкнулся с этой проблемой раньше, и я исправил ее с помощью простого метода обходного пути
. Для вашего Component.html
<select class="form-control" ngValue="op1" (change)="gotit($event.target.value)">
<option *ngFor="let workout of workouts" value="{{workout.name}}" name="op1" >{{workout.name}}</option>
</select>
Затем в вашем component.ts вы можете обнаружить выбранные вариант
gotit(name:string) {
//Use it from hare
console.log(name);
}
Вы можете использовать это [ngModel]
вместо [(ngModel)]
, и это Ok
<select class="form-control" **[ngModel]="selectedWorkout"** (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
Использовать индекс для отображения первого значения по умолчанию
<option *ngFor="let workout of workouts; #i = index" [selected]="i == 0">{{workout.name}}</option>
<select class="form-control" name='someting' [ngModel]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option value="{{workout.name}}" *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
Если вы используете форму, внутри тега select
должно быть поле name
.
Все, что вам нужно сделать, это просто добавить value
к тегу option
.
selectedWorkout
значение должно быть «назад» и выполнено.
Добавьте к ответу @Matthijs, убедитесь, что ваш select
элемент имеет атрибут name
, а его name
уникален в вашем html-шаблоне. Угловой 2 использует имя ввода для изменения изменений. Таким образом, если есть дублированные имена или нет имени, прикрепленного к элементу ввода, привязка завершится неудачно.