Search code examples
angularangular-materialangular-material2

Angular mat-checkbox getElementById


I've got a problem with the mat-checkbox from angular material. I've given the checkbox an ID like this:

<mat-checkbox class="toolbar-checkbox" id="myCheckbox">
    MyCheckbox
</mat-checkbox>

After that I'm trying to something with this element like this:

(<MatCheckbox>document.getElementById('myCheckbox')).checked = true;

But unfortunally I'm getting this error:

TS2352: Type 'HTMLElement' cannot be converted to type 'MatCheckbox'. 
Property '_changeDetectorRef' is missing in type 'HTMLElement'. 
(<MatCheckbox>document.getElementById('asdasd')).checked = true;

How can I solve this, or is there a better way to do something with an checkbox without using [(ngModel)]?


Solution

  • Use ViewChild decorator. Change your template to this:

    <mat-checkbox class="toolbar-checkbox" #myCheckbox>
        MyCheckbox
    </mat-checkbox>
    

    .. and in your typescript:

    import { ViewChild } from '@angular/core';
    import { MatCheckbox } from '@angular/material';
    
    @Component({
        ..... 
    })
    export class YourComponent {
        @ViewChild('myCheckbox') private myCheckbox: MatCheckbox;
    
        // You can then access properties of myCheckbox 
        // e.g. this.myCheckbox.checked
    }
    

    See this working StackBlitz demo.