Angular2 RC6升级
Angular2 RC6 upgrade
将我的项目更新为 RC6
后出现以下错误:
Error: Typescript found the following errors:
app.component.ts (12, 3): Argument of type '{ moduleId: string; selector: string; templateUrl: string; styleUrls: string[]; directives: (type...' is not assignable to parameter of type 'ComponentMetadataType'.
Object literal may only specify known properties, and 'directives' does not exist in type 'ComponentMetadataType'.
app.component.ts
import {Component, OnInit} from '@angular/core';
import {NavbarComponent} from "./shared/navbar/navbar.component";
import {ROUTER_DIRECTIVES} from "@angular/router";
import {SidebarComponent} from "./shared/sidebar/sidebar.component";
import {FooterComponent} from "./shared/footer/footer.component";
@Component({
moduleId: module.id,
selector: 'app-root',
templateUrl: 'app.component.html',
styleUrls: ['app.component.css'],
directives: [NavbarComponent, SidebarComponent, FooterComponent, ROUTER_DIRECTIVES]
})
export class AppComponent implements OnInit {
ngOnInit(): any {
return undefined;
}
}
花了我一段时间,但我想不通。
Directives
和 pipes
必须在 @NgModule
中定义,如果我没看错的话。 @Component
内的支持已删除。
所以是的,只需将您的指令移动到 NgModule
目前您有:带有指令 Ac 的组件 A 和带有指令 Bc 的组件 B,并且很可能是一个 AppModule,您只需将 Ac 和 Bc 移动到 AppModule 中。是的,您必须将它们从 @Component
声明中删除
这些指令将立即在您的模块中定义的组件中可用。
OP 中的示例变为:
app.component.ts
// imports...
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
})
export class AppComponent {}
app.module.ts
// imports...
@NgModule({
declarations: [
AppComponent,
NavbarComponent,
SidebarComponent,
FooterComponent
],
imports: [
BrowserModule,
CommonModule,
FormsModule
],
providers: [
//MyService, MyOtherService
],
entryComponents: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {}
查看路由器文档:router documentation
directives
和 pipes
必须在您的 @NgModule
声明中定义,因为 RC6。
从您的 @Component
装饰器中删除它们。
对于Angular2最终版本2.0.0.0
管道应在 app.module.ts 文件的声明部分声明
import {KeysPipe} from './keys.pipe';
@NgModule({
imports: [ BrowserModule, FormsModule, HttpModule ],
declarations: [ AppComponent, LoginComponent,ArticleComponent,**KeysPipe** ],
bootstrap: [ AppComponent, LoginComponent,ArticleComponent ],
})
只需观察上面代码片段中的 keypipe 实现即可。
将我的项目更新为 RC6
后出现以下错误:
Error: Typescript found the following errors:
app.component.ts (12, 3): Argument of type '{ moduleId: string; selector: string; templateUrl: string; styleUrls: string[]; directives: (type...' is not assignable to parameter of type 'ComponentMetadataType'.
Object literal may only specify known properties, and 'directives' does not exist in type 'ComponentMetadataType'.
app.component.ts
import {Component, OnInit} from '@angular/core';
import {NavbarComponent} from "./shared/navbar/navbar.component";
import {ROUTER_DIRECTIVES} from "@angular/router";
import {SidebarComponent} from "./shared/sidebar/sidebar.component";
import {FooterComponent} from "./shared/footer/footer.component";
@Component({
moduleId: module.id,
selector: 'app-root',
templateUrl: 'app.component.html',
styleUrls: ['app.component.css'],
directives: [NavbarComponent, SidebarComponent, FooterComponent, ROUTER_DIRECTIVES]
})
export class AppComponent implements OnInit {
ngOnInit(): any {
return undefined;
}
}
花了我一段时间,但我想不通。
Directives
和 pipes
必须在 @NgModule
中定义,如果我没看错的话。 @Component
内的支持已删除。
所以是的,只需将您的指令移动到 NgModule
目前您有:带有指令 Ac 的组件 A 和带有指令 Bc 的组件 B,并且很可能是一个 AppModule,您只需将 Ac 和 Bc 移动到 AppModule 中。是的,您必须将它们从 @Component
声明中删除
这些指令将立即在您的模块中定义的组件中可用。
OP 中的示例变为:
app.component.ts
// imports...
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
})
export class AppComponent {}
app.module.ts
// imports...
@NgModule({
declarations: [
AppComponent,
NavbarComponent,
SidebarComponent,
FooterComponent
],
imports: [
BrowserModule,
CommonModule,
FormsModule
],
providers: [
//MyService, MyOtherService
],
entryComponents: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {}
查看路由器文档:router documentation
directives
和 pipes
必须在您的 @NgModule
声明中定义,因为 RC6。
从您的 @Component
装饰器中删除它们。
对于Angular2最终版本2.0.0.0
管道应在 app.module.ts 文件的声明部分声明
import {KeysPipe} from './keys.pipe';
@NgModule({
imports: [ BrowserModule, FormsModule, HttpModule ],
declarations: [ AppComponent, LoginComponent,ArticleComponent,**KeysPipe** ],
bootstrap: [ AppComponent, LoginComponent,ArticleComponent ],
})
只需观察上面代码片段中的 keypipe 实现即可。