我试图使用angular-cli进行AOT编译设置。我有一个从抽象类继承的指令,并且我在编译期间得到一个错误,即angular无法确定抽象类属于哪个模块。我无法将其添加到NgModule的声明数组中,那么正确的方法是什么呢?我的代码结构如下所示,
//...imports
export abstract class TutorialDirective {
//...base class logic
}
@Directive({
selector: '[tut]',
exportAs: 'tut'
})
export class DefaultTutorialDirective extends TutorialDirective {
//...calls into the base class for some shared stuff.
}
错误看起来像这样
ERROR in Cannot determine the module for class TutorialDirective in /test-app/src/app/tutorial/directive/tutorial.directive.ts!
我的AppModule:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { TutorialService } from './tutorial/tutorial.service';
import { TutorialDirective, DefaultTutorialDirective } from './tutorial/directive/tutorial.directive';
@NgModule({
declarations: [
AppComponent,
DefaultTutorialDirective
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [TutorialService],
bootstrap: [AppComponent]
})
export class AppModule { }
在调试之后好了,如果我把它变成抽象并将其添加到声明中就可以了。这是否意味着我不能将一个类标记为抽象类?这看起来不对......
答案 0 :(得分:8)
从抽象类中删除@Component装饰器,将其替换为@Injectable()装饰器。
答案 1 :(得分:0)
是的..确实,如果你创建一个抽象类并尝试将它用作指令控制器,它将无法正常工作,原因在于documentation
当您创建指令时, Angular会创建指令控制器类的新实例。当您使用抽象类时,您不能拥有它的实例,因此它在您的情况下失败