Angular 2 - Managing the status of checkboxes in a list of checkboxes

I recently started using Angular 2 with Typescript and I am working on creating a list of checkboxes to manage their states.

Similar to how some shopping websites function, the checkboxes represent different companies. Users can select multiple checkboxes and then press a search button to display products from those selected companies.

<ul class="companies">
    <li *ngFor="let company of companies">
        <input type="checkbox">{{ companies.name }}
    </li>
</ul>

The "companies" array is retrieved from the database, where each company has an id and a name. Using *ngFor allows us to repeat the li element for each company in the array, displaying a checkbox next to the company name.

Without assigning individual ids to each checkbox, it becomes challenging to track their states. Any guidance on how to accomplish this would be greatly appreciated.

Answer №1

If you are utilizing a mat-checkbox, you can make use of the

@Output() change: EventEmitter<MatCheckboxChange>
event to trigger a method whenever the value state changes. Here is an example of how this can be implemented:

<ul class="companies">
    <li *ngFor="let company of companies">
        <mat-checkbox (change)="onCheckboxStateChange($event, company.id);">{{ companies.name }}</mat-checkbox>
    </li>
</ul>

You will then need to have a method called

onCheckboxStateChange(changeEvent: MatCheckboxChange, id: number)
in your TypeScript class to handle the checkbox event. The changeEvent object includes a property named checked, which can be used as shown below:

public onCheckboxStateChange(changeEvent: MatCheckboxChange, id: number) {
    const index = this.companies.findIndex(x => x.id === id);

    if (index === -1) {
        console.warn("Company not found");
        return;
    }

    companies[index].checked = changeEvent.checked;
}

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Installing and running Node.js within a tomcat server

After creating a web application using Angular, Node/Express, and MySQL, I faced an issue with deployment. My Angular app is running on a tomcat server connected to multiple PCs, but now I need to also deploy my backend (Node.js/Express.js) on the same s ...

Developing a Liferay 7.0 portlet using Angular and TypeScript

Is it possible to develop a Liferay 7.0 portlet using Angular (2, Angular Material v1.1.1) and TypeScript? I am aware that it is possible to incorporate Angular 1.4 library and create a portlet using plain JavaScript/Angular code, as mentioned in this sou ...

Tips for placing a marker at the center of the screen on Google Maps

I am developing a transportation app similar to Uber or Lyft using JavaScript. I am looking to retrieve the map location with the center of the screen, where there is a marker located at y = 0 and x = 0. Similar to the image below: The user should be abl ...

React typescript is handling various promise response types, causing strange behavior in type-checking

I recently started utilizing the and I seem to be encountering a perplexing issue. If further context is needed, please let me know and I will provide it. All the necessary functions and types are mentioned below my explanatory paragraphs. Your assistance ...

The type 'true | CallableFunction' does not have any callable constituents

The error message in full: This expression is not callable. No constituent of type 'true | CallableFunction' is callable Here is the portion of code causing the error: public static base( text, callB: boolean | CallableFunction = false ...

Issue with a child element that is malfunctioning because of the parent element

There seems to be an issue with the child tag link not working because of the parent tag link. Is there a solution for this problem? Please provide suggestions. Here is the code snippet: <div class="d-flex flex-wrap mx-auto mb-4"> < ...

Unable to locate the reference for 'bootstrap'

After trying to implement Bootstrap toast in an Angular Component, the following error message is displayed: "Cannot find name 'bootstrap'" Here is the HTML code similar to the Bootstrap documentation: <div class="toast" r ...

How to detect a change in the value of a formControl during each focusout event in Angular 6?

Within a child component, I have an input variable called @Input which measures in Inches. My form consists of 2 input text controls - 1. Foot 2. Inches I convert the @Input to feet and inches accordingly. The requirement is that only if the values are cha ...

Tips for providing certificate key file during the deployment of a cloud function?

Within my TypeScript file, the following code is present: import * as admin from 'firebase-admin' import * as functions from 'firebase-functions' const serviceAccountKey = "serviceAccountKey.json" const databaseURL = "https://blahblah. ...

What are the potential reasons behind an Uncaught TypeError arising from an Object Prototype in the AOT build, but not in the development environment?

I've successfully created an Angular application that works flawlessly in the development environment. However, I recently transferred it to a sandbox server and after running ng build with the necessary parameters for base-href and environment, I enc ...

The data type 'Observable<{}[]>' cannot be matched with the type 'AngularFireList<any>'

I have been learning how to use AngularFire2 by following this tutorial. Encountered the error: 'Type 'Observable<{}[]>' is not assignable to type 'AngularFireList'. Property 'query' is missing in type 'Obse ...

Taking in user inputs using Angular 8 reactive forms

My goal is to make my forms function as intended, with multiple forms on each product item having an update and delete option. However, I encountered an issue when adding the [formGroup]="profileForm" directive - the form controls stopped working. This was ...

Show a roster of individuals by inputting values that will populate the list with their names

I'm attempting to showcase a list of users by taking the value from an input and using it as a parameter in a get() method. After receiving the response from the get() method, I am pushing it into an object and then trying to display this object in th ...

The error occurred in Commands.ts for Cypress, stating that the argument '"login"' cannot be assigned to the parameter of type 'keyof Chainable<any>))`

Attempting to simplify repetitive actions by utilizing commands.ts, such as requesting email and password. However, upon trying to implement this, I encounter an error for the login (Argument of type '"login"' is not assignable to parameter of t ...

Angular Command Line Interface version 12.2.0 displays the message: "No overload matches this call."

I've been working on developing a shopping cart feature for an Angular project. I'm trying to define a product as a Product type, but I keep encountering an error message stating: "(product: Product) => { ..." The error message rea ...

Disabling lint in a PhpStorm or WebStorm project with angular-cli

I am currently using PhpStorm version 2017.2, and I have created an angular-cli project within a directory that already contains several modules and components built with angular-cli. The issue I am facing is that I am inundated with countless linting err ...

Setting the default value for a useRef<HTMLInputElement> in ReactJs with Typescript

Is there a way to assign a number as the initial value on useRef<HTMLInputElement> without using useState<number>() since the field is a simple counter? Below is my TypeScript code: const MyComponent = () => { const productAmountRef = us ...

What is preventing you from utilizing TypeScript's abstract classes for generating React factories, especially when regular classes seem to function properly?

Here is an example showcasing the behavior of TypeScript code using React with abstract classes: import * as React from "react"; class MyComponent<P> extends React.Component<P, any> { static getFactory() { return React.createFacto ...

Issue encountered with express-jwt and express-graphql: TypeScript error TS2339 - The 'user' property is not found on the 'Request' type

Implementing express-jwt and graphql together in typescript has been a challenge for me. import * as express from 'express' import * as expressGraphql from 'express-graphql' import * as expressJwt from 'express-jwt' import s ...

Step-by-step guide to designing a leaflet map using Angular Formly

I am faced with a challenge to incorporate a leaflet map into an angular form using formly, and being new to this formly framework is making it difficult for me. Previously, I was able to integrate the map with regular HTML in angular as shown below: map ...