Угловое 5 отправить обратно значение по умолчанию в раскрывающемся списке [отредактировано] [дубликат]

NoClassDefFoundError

Брошено, если экземпляр виртуальной машины 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'

Надеемся на эту помощь.

85
задан ClickThisNick 14 March 2016 в 03:09
поделиться

18 ответов

отлично работает, как показано ниже:

<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>
0
ответ дан André Rodrigues de Sousa 18 August 2018 в 05:52
поделиться

Вы можете сделать этот путь

<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>
14
ответ дан Anil Samal 18 August 2018 в 05:52
поделиться

Полностью сглаживая другие сообщения, вот что работает в ускоренном запуске 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>
1
ответ дан BeatriceThalo 18 August 2018 в 05:52
поделиться

Если вы не хотите привязку 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!

0
ответ дан Daniel C. Deng 18 August 2018 в 05:52
поделиться

Добавьте привязку к свойству selected, например:

<option *ngFor="#workout of workouts" [selected]="workout.name == 'back'">{{workout.name}}</option>
55
ответ дан Douglas 18 August 2018 в 05:52
поделиться
  • 1
    Это, похоже, не работает, глядя на мой выбранный вариант, у него нет какой-либо выбранной индикации – ClickThisNick 14 March 2016 в 04:59
  • 2
    @ClickThisNick Он работал, когда я тестировал его. См. этот plnkr . Когда он заканчивает загрузку, выпадающее меню выбора показывает "два" даже если нормальным значением по умолчанию будет первый элемент («один»). – Douglas 14 March 2016 в 05:08
  • 3
    Разница с кодом в @Douglas plnr заключается в том, что у него нет привязки [(ngModel)], поэтому он прослушивает привязку [selected] в plnkr, а не в кодогенезе OP (см. Мой ответ для ссылки на раздвоенный plnr что объясняет этот эффект) – Matthijs 20 April 2016 в 09:00
  • 4
    IN IE теперь работает – Rituraj ratan 6 January 2017 в 08:26
  • 5
    Использование динамических форм: 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

<select [compareWith]="compareFn"  [(ngModel)]="selectedCountries">
    <option *ngFor="let country of countries" [ngValue]="country">
        {{country.name}}
    </option>
</select>
compareFn(c1: Country, c2: Country): boolean {
    return c1 && c2 ? c1.id === c2.id : c1 === c2;
}
< / blockquote>

Таким образом, в качестве значения по умолчанию может быть задан другой (новый) экземпляр объекта, а compareFn используется, чтобы выяснить, должны ли они считаться равными (например, если свойство id совпадает с

36
ответ дан Günter Zöchbauer 18 August 2018 в 05:52
поделиться
  • 1
    если у вас есть время, вы могли бы сделать plunkr для этого? По какой-то причине, когда я пытаюсь это сделать, $ event встречается как событие, а не объект. Если я изменяю событие на event.target.value, значение встречается как строка, например «[object]» – crh225 2 November 2016 в 17:01
  • 2
    Я думаю, было бы более полезно, если вы попытаетесь создать Plunker, который позволит воспроизвести вашу проблему ;-) Возможно, вы используете [value] вместо [ngValue], или ваш код каким-то образом вызывает преобразование значения в строку. – Günter Zöchbauer 2 November 2016 в 17:06
  • 3
    Что показывают c1 и c2 в compareFn? А также, как работает оценка в функциональном теле? – DongBin Kim 19 March 2018 в 04:47
  • 4
    Значения selectedCountries и country – Günter Zöchbauer 19 March 2018 в 05:11
  • 5
    @ GünterZöchbauer Почему c1 && c2 необходимо? – DongBin Kim 19 March 2018 в 06:19

В соответствии с 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;
}
4
ответ дан IKavanagh 18 August 2018 в 05:52
поделиться

Добавить свойство связывания выбрано, но обязательно сделайте его нулевым для других полей, например:

<option *ngFor="#workout of workouts" [selected]="workout.name =='back' ? true: null">{{workout.name}}</option>

Теперь он будет работать

0
ответ дан Jcoder 18 August 2018 в 05:52
поделиться

Повлиял немного с этим, но в итоге получилось следующее решение ... возможно, это поможет кому-то.

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];
    }
}
4
ответ дан johnb 18 August 2018 в 05:52
поделиться

Добавьте этот код в положение o списка выбора.

<option [ngValue]="undefined" selected>Select</option>

19
ответ дан Mahesh 18 August 2018 в 05:52
поделиться
  • 1
    Большое спасибо! это отлично работает для моего сценария – coder 7 April 2018 в 16:25

просто установите для модели значение по умолчанию, которое вы хотите:

selectedWorkout = 'back'

Я создал вилку @Douglas 'plnkr здесь , чтобы продемонстрировать различные способы для получения желаемого поведения в угловом2.

30
ответ дан Matthijs 18 August 2018 в 05:52
поделиться
  • 1
    для этого для меня работать (в угловом 4) мне также пришлось установить [ngValue] = "val". Мой itemssource был не массивом объектов, а просто массивом строк. <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'
3
ответ дан Pranav Labhe 18 August 2018 в 05:52
поделиться

Шаг: 1 Создать свойства declare class

export class Task {
    title: string;
    priority: Array<any>;
    comment: string;

    constructor() {
        this.title      = '';
        this.priority   = [];
        this.comment    = '';
     }
}

Строка: 2 Ваш компонентный класс

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

<select class="form-control" name="priority" [(ngModel)]="taskModel.priority"  required>
    <option *ngFor="let list of priorityList" [value]="list.value">
      {{list.label}}
    </option>
</select>

Выход:

0
ответ дан Ram Pukar 18 August 2018 в 05:52
поделиться

Я столкнулся с этой проблемой раньше, и я исправил ее с помощью простого метода обходного пути

. Для вашего 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);
}
-1
ответ дан Ramy hakam 18 August 2018 в 05:52
поделиться

Вы можете использовать это [ngModel] вместо [(ngModel)], и это Ok

<select class="form-control" **[ngModel]="selectedWorkout"** (ngModelChange)="updateWorkout($event)">
   <option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
3
ответ дан Saeed Py 18 August 2018 в 05:52
поделиться

Использовать индекс для отображения первого значения по умолчанию

<option *ngFor="let workout of workouts; #i = index" [selected]="i == 0">{{workout.name}}</option>
12
ответ дан Sajith Mantharath 18 August 2018 в 05:52
поделиться
<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 значение должно быть «назад» и выполнено.

0
ответ дан Vivek Doshi 18 August 2018 в 05:52
поделиться

Добавьте к ответу @Matthijs, убедитесь, что ваш select элемент имеет атрибут name, а его name уникален в вашем html-шаблоне. Угловой 2 использует имя ввода для изменения изменений. Таким образом, если есть дублированные имена или нет имени, прикрепленного к элементу ввода, привязка завершится неудачно.

0
ответ дан Wei Xu 18 August 2018 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: