2017-01-16 20 views
8

Tôi đang cố gắng thiết lập biên dịch AOT bằng angular-cli. Tôi đã có một chỉ thị kế thừa từ một lớp trừu tượng, và tôi nhận được một lỗi trong quá trình biên dịch mà góc không thể xác định mô-đun lớp trừu tượng thuộc về. Tôi không thể thêm nó vào mảng khai báo của NgModule, vậy cách tốt nhất để làm điều này là gì? Cấu trúc mã của tôi trông như thế này,Góc 2 angular-cli AOT khai báo lớp trừu tượng trong mô-đun?

//...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. 
} 

Lỗi trông giống như

ERROR in Cannot determine the module for class TutorialDirective in /test-app/src/app/tutorial/directive/tutorial.directive.ts! 

My AppModule này:

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 { } 

Ok sau khi một số lỗi, nếu tôi làm cho nó không trừu tượng và thêm nó vào khai báo nó hoạt động. Điều này có nghĩa là tôi không thể đánh dấu một lớp là trừu tượng? Đó dường như không đúng ...

+0

Thêm mã cho mô-đun của bạn app.module.ts – Aravind

+0

@Aravind ok. Tôi không thể thêm TutorialDirective vào mảng khai báo. Chỉ cần cho bạn biết. – Steveadoo

+0

Ok, nếu tôi làm cho nó không trừu tượng và thêm nó vào khai báo nó hoạt động. Điều này có nghĩa là tôi không thể đánh dấu một lớp là trừu tượng? Điều đó có vẻ không đúng ... – Steveadoo

Trả lời

0

Có .. Đúng là nếu bạn tạo ra một lớp trừu tượng và cố gắng sử dụng nó như một bộ điều khiển chỉ thị, nó sẽ không làm việc lý do là ở đây tại documentation

Phần được đánh dấu của tài liệu như bên dưới enter image description here

Khi bạn tạo chỉ thị Góc tạo mới một lớp điều khiển của chỉ thị. Khi bạn sử dụng một lớp trừu tượng, bạn không thể có ví dụ cho nó và do đó nó không thành công trong trường hợp của bạn

+4

Tôi có một lớp thực hiện kế thừa từ lớp cơ sở là góc của cá thể sẽ là tạo ra, không phải trừu tượng. Điều này tất cả các công trình nếu tôi sử dụng JIT, nhưng không phải AOT. Tôi không chắc lắm. – Steveadoo

+1

Cùng một vấn đề ở đây, bạn có cách giải quyết nào không? – godzsa

2

Xóa trình trang trí @Component khỏi lớp trừu tượng.

+0

Điều này có vẻ như giải pháp đúng cho tôi. Bạn không nên cần trang trí vì mỗi lớp triển khai lớp trừu tượng sẽ có trình trang trí riêng của nó. Khi trang trí được loại bỏ cho lớp trừu tượng, bạn sẽ không cần phải đặt nó trong các khai báo ngModule của bạn vì nó chỉ là một nhập khẩu kiểu nhập bình thường vào thời điểm này. – apricity

+0

Tôi cũng phải thêm @Injectable() vào vị trí của @Component để làm việc này – apricity

+0

IMO giải pháp này có ý nghĩa nhất; kể từ khi nó trừu tượng, nó không thể thực sự được coi là những gì góc định nghĩa như là một thành phần. –

Các vấn đề liên quan