Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

246
Vistas
¿Cómo deshabilitar las casillas de verificación no seleccionadas y cambiar la clase css para las casillas de verificación seleccionadas solo usando Angular 12 y Typescript?

He almacenado casillas de verificación dinámicamente usando una matriz json de objetos. Lo que necesito es seleccionar solo 5 casillas de verificación. Si mi selección llega a 5, entonces tengo que deshabilitar las casillas de verificación sin marcar y cambiar el css solo para las casillas de verificación sin marcar. Lo intenté, pero cuando se alcanza la selección 5, no puedo cambiar la clase a esas casillas de verificación no seleccionadas.

 <div class="pinnedtoolsbox" *ngFor="let item of menuList"> <div> <div class="pinnedtoolbox-caption"> <div> <img src="{{item.icon}}"/> </div> <div> <span>{{item.title}}</span> </div> </div> </div> <div *ngFor="let sublist of item.submenus; let i=index" > <label [ngClass]="sublist.selected ? 'submenulist_label_checked': 'submenulist_label'"> <div> <img [src]="sublist.selected ? 'assets/icons/listmenuiconwhite.svg': 'assets/icons/listicon.svg'"/> </div> <div> {{ sublist.menu }} <input type="checkbox" [(ngModel)]="sublist.selected" [disabled]="disableCheckbox(sublist)" (change)="changeSelection($event, sublist)" style="display:none;"> </div> </label> </div> </div>

archivo componente.ts

 private _jsonURL = 'assets/menus.json'; public getJSON(): Observable<any> { return this.http.get(this._jsonURL); } [{"title":"one", "submenus": [ { "id":1, "menu": "home", "selected": false }, { "id":2, "menu": "about", "selected": false }, ] }, {"title":"two", "submenus": [ { "id":1, "menu": "Status", "selected": false }, { "id":2, "menu": "Balance", "selected": false }, ] }, ] checkboxList = []; public maxElementCheckbox = 5; changeSelection($event, item){ if ($event.target.checked) { this.checkboxList.push(item); } else { this.checkboxList.splice(this.checkboxList.indexOf(item), 1); console.log("esle part"); } console.log(this.checkboxList); } public disableCheckbox(id): boolean { return this.checkboxList.length >= this.maxElementCheckbox && !this.checkboxList.includes(id); }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si no es 100% necesario que las casillas de verificación se deshabiliten después de alcanzar el límite de 5, puede agregar un contador a su función changeSelection y resaltar un mensaje de error para el usuario, si se alcanza el límite.

Si es fundamental para usted deshabilitar las casillas de verificación, una primera idea en mi mente podría ser usar algo como un selector para todos los elementos de la casilla de verificación sin un atributo activo con .querySelectorAll('.specificClassForTheCheckboxes'); o asigne a sus casillas de verificación una identificación para seleccionarlas específicamente en el atributo seleccionado con el valor falso.

about 4 years ago · Juan Pablo Isaza Denunciar

0

No encuentro ninguna condición en su ngClass para marcar las casillas de verificación no seleccionadas después de seleccionar 5 casillas de verificación. Eso debería ayudar:

HTML:

 <div class="pinnedtoolsbox" *ngFor="let item of menuList"> <div *ngFor="let sublist of item.submenus; let i = index"> <label [ngClass]="checkboxList.length >= maxElementCheckbox && !sublist.selected ? 'submenulist_label' : 'submenulist_label_checked'"> <div> <input type="checkbox" [(ngModel)]="sublist.selected" [disabled]="disableCheckbox(sublist)" (change)="changeSelection($event, sublist)"/> <label>{{sublist.menu}}</label> </div> </label> </div> </div>

MECANOGRAFIADO:

 menuList = [ { title: 'one', submenus: [ { id: 1, menu: 'home', selected: false, }, { id: 2, menu: 'about', selected: false, }, ], }, { title: 'two', submenus: [ { id: 1, menu: 'Status', selected: false, }, { id: 2, menu: 'Balance', selected: false, }, { id: 3, menu: 'Test1', selected: false, }, { id: 4, menu: 'Test2', selected: false, }, { id: 5, menu: 'Test3', selected: false, }, ], }, ]; checkboxList = []; public maxElementCheckbox = 5; changeSelection($event, item) { if ($event.target.checked) { this.checkboxList.push(item); } else { this.checkboxList.splice(this.checkboxList.indexOf(item), 1); } } public disableCheckbox(id): boolean { return ( this.checkboxList.length >= this.maxElementCheckbox && this.checkboxList.indexOf(id) == -1 ); }

CSS:

 .submenulist_label { color: red; }

Aquí hay una demostración en ejecución.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda