typescript - För att tillåta vilket element som helst, lägg till 'NO_ERRORS_SCHEMA' i '@NgModule.schemas' för denna komponent. i Angular 4
Jag skapade ett nytt projekt med angular-cli (ng new my-project-name)
När jag kör npm run test körs det utan några fel.
Jag lade till font-awesome-modulen (https://www.npmjs.com/package/angular-font-awesome) i mitt projekt för att visa fontikoner.
I min HTML-fil lade jag till <fa name="bars"></fa>-taggen och fick resultatet som förväntat. Om jag kör npm run test igen slutar det med 3 fel, alla riktade mot fa-taggen.
Här är ett exempel på felrapport
'fa' is not a known element:
1. If 'fa' is an Angular component, then verify that it is part of this module.
2. To allow any element add 'NO_ERRORS_SCHEMA' to the '@NgModule.schemas' of this component. ("--The content below is only a placeholder and can be replaced.-->
<div style="text-align:center"> [ERROR ->]<fa name="bars"></fa>
<h1> Welcome to {{title}}!
"): ng:///DynamicTestModule/AppComponent.html@2:2 Error: Template parse errors:
at syntaxError home/harsha/Documents/Projects/testProject/node_modules/@angular/compiler/esm5/compiler.js:466:22)
Jag försökte några lösningar som att lägga till NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA i app.module.ts-filen.
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AngularFontAwesomeModule
],
providers: [],
bootstrap: [AppComponent],
schemas: [
CUSTOM_ELEMENTS_SCHEMA,
NO_ERRORS_SCHEMA
]
})`
Men inget fungerade.
Svar #1
I din testspecifikationsfil måste det ställas in så här:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ yourcomponent ],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
Observera egenskapen schemas i metoden TestBed.configureTestingModule. Efter att ha ställt in egenskapen schemas bör dina tester köras utan fel precis som innan du lade till Font Awesome-komponenten.
Svar #2
Jag löste detta problem genom att skapa en egen komponent kallad SampleComponent (sample.ts), som jag vill använda i welcome.html och som ingår i common-modulfilerna för alla egna komponenter i ett Ionic-projekt med namnet components.module.ts, som ser ut som följer:
import { NgModule,NO_ERRORS_SCHEMA,CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { SampleComponent } from './sample/sample';
@NgModule({
declarations: [SampleComponent],
imports: [],
exports: [SampleComponent],
schemas: [
CUSTOM_ELEMENTS_SCHEMA,
NO_ERRORS_SCHEMA
]
})
export class ComponentsModule {}
I welcome.module.ts där jag vill använda min sample.component.ts importerade jag components.module.ts som ser ut som följande
import { NgModule } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { IonicPageModule } from 'ionic-angular';
import { WelcomePage } from './welcome';
import { ComponentsModule } from "../../components/components.module";
@NgModule({
declarations: [
WelcomePage,
],
imports: [
IonicPageModule.forChild(WelcomePage),
TranslateModule.forChild(),
ComponentsModule
],
exports: [
WelcomePage
]
})
export class WelcomePageModule { }
welcome.html där jag använde min anpassade komponent (SampleComponent)
<ion-content scroll="false">
<div class="splash-bg"></div>
<div class="splash-info">
<div class="splash-logo"></div>
<div class="splash-intro">
{{ 'WELCOME_INTRO' | translate }}
</div>
</div>
<div padding>
<p>`enter code here`
<sample>loading...</sample>
</p>
<button ion-button block (click)="signup()">{{ 'SIGNUP' | translate }}</button>
<button ion-button block (click)="login()" class="login">{{ 'LOGIN' | translate }}</button>
</div>
</ion-content>
