Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

629
Visualizações
Angular2: cómo enlazar para seleccionar múltiples

Puedo vincular usando ngModel para una sola selección, pero me gustaría vincular una matriz a las múltiples opciones seleccionadas. Cuando intento esto me sale el error

No se puede encontrar un objeto de soporte diferente 'xxx' en 'myModelProperty'

Mi código

 <select multiple [(ngModel)]="myModelProperty"> <option *ngFor="#item of myOptions" [value]="item.value">{{item.name}}</option> </select>
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

¿Por qué todas esas respuestas complicadas sobre preguntas simples?

Si de antemano tiene opciones que deben seleccionarse, puede hacerlo simplemente de esta manera:

Este código es bueno :

HTML

 <select multiple [(ngModel)]="myModelProperty"> <option *ngFor="#item of myOptions" [value]="item.value">{{item.name}}</option> </select>

ANGULAR

 myModelProperty: any; myModelProperty = ['YOUR_VALUE', 'YOUR_VALUE'];

o si tiene una cadena , puede analizarla

 myModelProperty: any; myModelProperty = string.split(',');

Entonces, todo lo que tiene que hacer es que [(ngModel)] de la etiqueta de selección, debe inicializarse en la parte angular con una matriz de valores que corresponden a [valor] de la etiqueta de opción

Esto seleccionará automáticamente una o más opciones dependiendo de los valores de la matriz.

over 4 years ago · Santiago Trujillo Relatório

0

Aquí hay una implementación de lista de selección múltiple que admite el enlace de datos bidireccional. Uso @ViewChild en lugar de getElementById() .

 @Component({ selector: 'my-app', template: `{{title}}<p> <select #select multiple (change)="change($event.target.options)"> <option *ngFor="#item of myOptions" [value]="item.value"> {{item.name}} </option> </select> <br><button (click)="changeOptions()">select 1 and 3</button> <p>{{selectedValues | json}}` }) export class AppComponent { @ViewChild('select') selectElRef; title = "Angular 2 beta - multi select list"; myOptions = [ {value: 1, name: "one"}, {value: 2, name: "two"}, {value: 3, name: "three"}]; selectedValues = ['1','2']; myModelProperty = this.myOptions[0]; constructor() { console.clear(); } ngAfterViewInit() { this.updateSelectList(); } updateSelectList() { let options = this.selectElRef.nativeElement.options; for(let i=0; i < options.length; i++) { options[i].selected = this.selectedValues.indexOf(options[i].value) > -1; } } change(options) { this.selectedValues = Array.apply(null,options) // convert to real Array .filter(option => option.selected) .map(option => option.value) } changeOptions() { this.selectedValues = ['1','3']; this.updateSelectList(); } }

Plunker

Cada vez que alguna lógica de componente cambia la propiedad de valores selectedValues , también se debe llamar a updateSelectList() , como se muestra en la lógica de devolución de llamada del botón "seleccionar 1 y 3".

Para una reutilización más fácil, esto probablemente debería refactorizarse en una directiva de atributo. (¿Ningún arrendatario?)

over 4 years ago · Santiago Trujillo Relatório

0

Como han dicho otros, todavía no es compatible de forma predeterminada en Angular2. Pensé en publicar esto, parece una solución mucho más simple. Aquí hay un HTML de muestra:

 <select multiple (change)="setSelected($event.target)"> <option *ngFor="#item of myOptions" [value]="item.value">{{item.name}}</option> </select>

Y myClass con una función setSelected :

 ... export class myClass { ... myOptions: []; ... setSelected(selectElement) { for (var i = 0; i < selectElement.options.length; i++) { var optionElement = selectElement.options[i]; var optionModel = this.myOptions[i]; if (optionElement.selected == true) { optionModel.selected = true; } else { optionModel.selected = false; } } } } ...

Cada vez que necesite una referencia a elementos seleccionados, puede utilizar:

 var selectedItems = this.myOptions.filter((item) => { return item.selected === true; });
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda