Array de Select para salvar – javascript html5 angular
Pergunta:
Fazendo um array de selects utilizando multi-select, mas os select não estou se comunicando, quando eu seleciono um aparece no json, mas quando eu vou selecionar outro subscreve aqueles que eu selecionei.Estou utilizando Angular 4.
Segue o link abaixo para testar a função.
Staackblitz: https://stackblitz.com/edit/angular-tjgycw?file=src/app/app.component.html
JSON
Component
colecaoGrupoPermissoes: ColecaoGrupoPermissao[];
this.perfilAcessoService.findAllPermissoes()
.subscribe(colecaoGrupoPermissoes => {
console.log(colecaoGrupoPermissoes)
this.colecaoGrupoPermissoes = colecaoGrupoPermissoes;
})
this.perfilAcessoForm = this.builder.group({
id: [],
nome: ['', [Validators.required, Validators.maxLength(120)]],
tipoPerfil: ['', [Validators.required]],
unidade: this.builder.group({
id: ['', [Validators.required]]
}),
descricao: ['', [Validators.required, Validators.maxLength(80)]],
permissoes: ([{}]),
}, {});
Html
<div id="collapse{{i}}" class="accordion-body collapse" aria-expanded="false" style="">
<div class="panel-body">
<!-- BUTTON ADD FORMAÇÃO -->
<div class="row">
<div *ngFor="let grupoPermissao of colecaoGrupoPermissao.grupoPermissoes">
<div class="col-md-6">
<p>{{grupoPermissao.nome | translate}}</p>
</div>
<div class="col-md-6">
<input-container fieldErrorCode="{{extractErrorCode('permissao')}}" fieldName="permissao">
<select class="form-control" formControlName="permissoes" [compareWith]="compareFn" multiple>
<option *ngFor="let permissao of grupoPermissao.permissoes" [ngValue]="permissao">{{permissao.nome}}</option>
</select>
</input-container>
</div>
</div>
</div>
</div>
</div>
Autor da pergunta Lucas
Resposta :
Postando resposta do stackblitz
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HelloComponent } from './hello.component';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
declarations:[
AppComponent,
HelloComponent
],
imports: [
BrowserModule,
CommonModule,
ReactiveFormsModule,
FormsModule,
],
exports: [
CommonModule,
FormsModule,
ReactiveFormsModule
],
bootstrap:[ AppComponent ],
})
export class AppModule {}
app.component.ts
import { Component, OnInit } from '@angular/core';
import {FormBuilder, FormGroup, FormControl } from '@angular/forms'
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
name = 'Angular';
acessoForm: FormGroup;
listaPermissoes: any[];
constructor(
private builder: FormBuilder,
){
}
ngOnInit(){
this.listaPermissoes = [
{
"id": 2,
"nome": "grupo.perm.cadeira",
"permissoes": [
{
"id": 6,
"nome": "perm.cadastrarCadeira"
},
{
"id": 7,
"nome": "perm.alterarCadeira"
},
]
},
{
"id": 4,
"nome": "grupo.perm.mesa",
"permissoes": [
{
"id": 15,
"nome": "perm.cadastrarMesa"
},
{
"id": 16,
"nome": "perm.alterarMesa"
},
]
}]
this.acessoForm = this.builder.group(
this.listaPermissoes.map((item, index) => `permissoes-${index}`)
.reduce((pre, curr) => {
pre[curr] = [[]];
return pre; }, {}), {});
}
selectedPermissoes(){
return [].concat(...Object.values(this.acessoForm.value));
}
test(){
console.log(this.selectedPermissoes())
}
}
app.component.html
<form [formGroup]="acessoForm">
<div *ngFor="let listaPermissao of listaPermissoes; let i = index">
<div class="col-md-6">
<p>{{listaPermissao.nome}}</p>
</div>
<div class="col-md-6">
<select class="form-control" [formControlName]="'permissoes-'+i" multiple>
<option *ngFor="let permissao of listaPermissao.permissoes" [ngValue]="permissao">{{permissao.nome}}</option>
</select>
</div>
</div>
</form>
<pre (click)="test()">{{acessoForm.value | json}}</pre>




