【发布时间】:2018-05-03 04:31:04
【问题描述】:
我想为我的应用创建一个可重用的标头。所以,我做到了:
创建组件(app-header):
app-header.ts:
import { Component } from '@angular/core';
@Component({
selector: 'app-header',
templateUrl: 'app-header.html'
})
export class AppHeaderComponent {
text: string;
constructor() {
console.log('Hello AppHeaderComponent Component');
this.text = 'Hello World';
}
}
具有 HTML 的:
app-header.html:
<div>
{{text}}
</div>
我已经在@NgModule 中添加了AppHeaderComponent 到declarations:
...
import { AppHeaderComponent } from '../components/app-header/app-header';
@NgModule({
declarations: [
MyApp,
TabsPage,
AppHeaderComponent
],
...
我正在使用 TabsTemplate,我想在每个标签中添加这个组件,所以我在 feed.html(我的一个标签)上做了:
<app-header></app-header>
<ion-content>
...
但它给出了以下错误:
未捕获的错误:模板解析错误:'app-header' 不是已知的 元素: 1. 如果“app-header”是一个 Angular 组件,那么验证它是这个模块的一部分。 2. 如果 'app-header' 是一个 Web 组件,则将 'CUSTOM_ELEMENTS_SCHEMA' 添加到该组件的 '@NgModule.schemas' 压制此消息。 (" -->
[错误->]
所以,我将app-header.ts 更改为:
import { Component, NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@Component({
selector: 'app-header',
templateUrl: 'app-header.html'
})
@NgModule({
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
})
export class AppHeaderComponent {
text: string;
constructor() {
console.log('Hello AppHeaderComponent Component');
this.text = 'Hello World';
}
}
但同样的错误仍然存在。
我该怎么做?
更新:
我正在使用标签,所以,我有:
tabs.ts:
import { Component } from '@angular/core';
import { FeedPage } from '../feed/feed';
import { AboutPage } from '../about/about';
@Component({
templateUrl: 'tabs.html'
})
export class TabsPage {
tabFeed = FeedPage;
tabAbout= AboutPage;
constructor() {
}
}
还有tabs.html:
<ion-tabs>
<ion-tab [root]="tabFeed" tabIcon="paper"></ion-tab>
<ion-tab [root]="tabAbout" tabIcon="search"></ion-tab>
</ion-tabs>
每个标签都会加载一个页面,例如feed.html(在问题中引用)
代码架构:
而components.modules.ts 有:
import { NgModule } from '@angular/core';
import { AppHeaderComponent } from './app-header/app-header';
@NgModule({
declarations: [AppHeaderComponent],
imports: [],
exports: [AppHeaderComponent]
})
export class ComponentsModule {}
【问题讨论】:
-
该错误表明组件未加载,因此 CUSTOM_ELEMENTS_SCHEMA 没有帮助。目前还不清楚它是在哪个 NgModule 模块中声明的,这很重要。考虑提供stackoverflow.com/help/mcve。
-
@estus 但我指定了我试图将
CUSTOM_ELEMENTS_SCHEMA置于问题的位置......有什么疑问? -
如果没有 MCVE,问题就跑题了。模块的层次结构是有问题的。此外,在您的代码中,在组件类上指定了带有 CUSTOM_ELEMENTS_SCHEMA 的 NgModule。当然,它不会以这种方式工作。即使您可以让它工作,主要问题是编译器无法识别该组件。通常你几乎不应该使用 CUSTOM_ELEMENTS_SCHEMA。这个错误不应该存在。
标签: angular typescript ionic-framework ionic2 ionic3