模板解析错误:X不是已知元素

时间:2018-06-08 07:58:12

标签: angular ionic-framework ionic3 angular2-template

我的组件' countries-menu'有一些问题。 该组件在另一个页面中工作正常,所以问题不在于组件(我不确定,但我认为我的组件没问题)。 也许宣言中存在冲突,或者我不知道。

我的组件 HTML

<form [formGroup]="form">
    <ion-item>
        <ion-label floating>{{ 'NEW_EVENT_COUNTRY_HEADER' | translate }}*</ion-label>
        <ion-select (ionChange)="selectCountry(country)" formControlName="country">
            <ion-option *ngFor="let country of countries">{{country.name}}</ion-option>
        </ion-select>
    </ion-item>
</form>

我的组件 TS

import { Component, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
import { TranslateService } from '@ngx-translate/core';

/**
 * Generated class for the CountriesMenuComponent component.
 *
 * See https://angular.io/api/core/Component for more info on Angular
 * Components.
 */
@Component({
  selector: 'countries-menu',
  templateUrl: 'countries-menu.html',
})
export class CountriesMenuComponent {
  @Input() form: FormGroup;
  @Input() currentEvent?: Object;
  private countries: Object;

  constructor(private httpClient: HttpClient, private translate: TranslateService) {
    const url = 'assets/countries/' + this.translate.currentLang + '.json';
    this.httpClient.get(url).subscribe((data) => {
      this.countries =  data;
    },                                 (error) => {
      this.httpClient.get('assets/countries/en.json').subscribe((data) => {
        this.countries =  data;
      });
    });
  }

  selectCountry(country: any) {
    if (this.currentEvent !== undefined) this.currentEvent[country] = country;
  }
}

components.module.ts 我导出组件(还有很多其他组件,但我删除它们以保存位置)

import { CountriesMenuComponent } from './countries-menu/countries-menu';

@NgModule({
  declarations: [...],
  imports: [IonicModule],
  exports: [...,
    CountriesMenuComponent],
})
export class ComponentsModule { }

然后在我的模块中,我想使用组件,我使用声明数组。

import { CountriesMenuComponent } from '../../components/countries-menu/countries-menu';

@NgModule({
  declarations: [
    PersonalInformationPage,
    CountriesMenuComponent,
  ],
  imports: [
    IonicPageModule.forChild(PersonalInformationPage),
    TranslateModule.forChild(),
  ],
  providers: [
    // Keep this to enable Ionic's runtime error handling during development
    { provide: ErrorHandler, useClass: IonicErrorHandler },
    LeadService,
  ],
})
export class PersonalInformationPageModule { }

但是当我使用我的HTML选择器时出现此错误:模板解析错误:&#39; countries-menu&#39;不是一个已知元素:

HTML

...
<ion-col>
  <countries-menu [form]="form"></countries-menu>
</ion-col>
...

我在另一个网页上做了同样的事情,并且工作正常。 我试图将声明放在app.module.ts中,以便在所有应用程序中访问但它不起作用。 我不知道如何解决这个问题,也许我错过了什么?我不知道,但它在另一个页面上工作正常,没有别的。

感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

不要声明已在另一个模块中声明的类。见documentation。当我读到“我在另一个网页上做了同样的事情,并且工作正常”时,我明白你犯了这个错误。因此,CountriesMenuComponent必须仅在ComponentsModule中声明。

尝试在ComponentsModule中声明您的组件,并在PersonalInformationPageModule中导入此模块:

<强> components.module.ts

import { CountriesMenuComponent } from './countries-menu/countries-menu';

@NgModule({
  declarations: [
      CountriesMenuComponent,
      ...          
  ],
  imports: [IonicModule],
  exports: [...,
    CountriesMenuComponent],
})
export class ComponentsModule { }

PersonalInformationPageModule

@NgModule({
  declarations: [
    PersonalInformationPage,
  ],
  imports: [
    ComponentsModule,
    IonicPageModule.forChild(PersonalInformationPage),
    TranslateModule.forChild(),
  ],
  providers: [
    // Keep this to enable Ionic's runtime error handling during development
    { provide: ErrorHandler, useClass: IonicErrorHandler },
    LeadService,
  ],
})
export class PersonalInformationPageModule { }