Error : No providers for Component

17,037

Solution 1

It seems you have missed to register FoldersComponent to @NgModule({})

Can you post your main file where you have used NgModule

Solution 2

I was facing the same issue. Turns out I had missed updating the following in my code:

  1. @Injectable({ providedIn: 'root' }) in the .ts file of the component that you want to import.

  2. Add the component in the NgModule of your appModule.

Solution 3

try this, you have not imported your component.

import {  FoldersComponent  } from '../path/to/component
constructor(private _foldersComponent : FoldersComponent){}
@Directive({
selector: '[icheck]'

})
 ... rest of file 

Then to call methods from FoldersComponent just use _foldersComponent.

For example, this._foldersComponent.someMethod()

Share:
17,037
user1814879
Author by

user1814879

Updated on June 08, 2022

Comments

  • user1814879
    user1814879 almost 2 years

    I have a directive where I defined a radio button and I want to call a method of a component .. Whene I inject the component in constructor I got this error : ERROR Error: No provider for FoldersComponent!

    directive.ts

       import { FoldersComponent } from '../folders/folders.component';
    import { Directive, ElementRef, HostListener, Input, AfterViewInit, ViewChild, EventEmitter, Output } from '@angular/core';
    
    declare var jQuery: any;
    
    @Directive({
      selector: '[icheck]'
    })
    
    export class IcheckDirective implements AfterViewInit {
    
      @Output('icheck')
      callComponentFunction: EventEmitter<any> = new EventEmitter<any>();
      constructor(private el: ElementRef, private parentCmp: FoldersComponent) {
        jQuery(this.el.nativeElement).iCheck({
          checkboxClass: 'icheckbox_square-aero',
          radioClass: 'iradio_square-aero'
        }).on('ifChecked', function(event) {
          if (jQuery('input').attr('type') === 'radio') {
            this.parentCmp.selectType();
          }
        });
      }
    
      ngAfterViewInit(): void {
      }
    }
    

    folder.component.ts

    @Component({
      selector: 'app-folders',
      templateUrl: './folders.component.html',
      styleUrls: ['./folders.component.css'],
    })
    export class FoldersComponent implements OnInit {
       constructor(
        private route: ActivatedRoute,
        private router: Router
      ) {  }
    
      selectType() {
        //    alert();
        console.log("Ici");
      }
    }
    

    folder.component.html

    <input type="radio" icheck name="filters.type" [(ngModel)]="filters.type"                   value="IN"> (IN)
    

    My @NgModule

    @NgModule({
      declarations: [
        AppComponent,
        LoginComponent,
        FoldersComponent,
      ],