我有一个指令,我定义了一个单选按钮,我想调用一个组件的方法..
当我在构造函数中注入组件时,我收到此错误: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)
我的@NgModule
@NgModule({
declarations: [
AppComponent,
LoginComponent,
FoldersComponent,
],
答案 0 :(得分:2)
您似乎错过了将FoldersComponent
注册到@NgModule({})
您可以将主文件发布到已使用NgModule
答案 1 :(得分:1)
我遇到了同样的问题。原来我错过了更新代码中的以下内容:
@Injectable({ providedIn: 'root' })
在要导入的组件的 .ts 文件中。
在 appModule 的 NgModule 中添加组件。
答案 2 :(得分:0)
试试这个,你还没有导入你的组件。
import { FoldersComponent } from '../path/to/component
constructor(private _foldersComponent : FoldersComponent){}
@Directive({
selector: '[icheck]'
})
... rest of file
然后从FoldersComponent调用方法只需使用_foldersComponent。
例如,this._foldersComponent.someMethod()