zak*_*ces 11 import module typescript angular
我简单的应用程序有一个名为根模块的AppModule并命名一个功能模块HomeModule.我试图创建一个名为部件的路由HomeComponent(这是部分HomeModule),但我得到的是
Module "HomeModule" has no exported member 'HomeComponent'
Run Code Online (Sandbox Code Playgroud)
app.routing.ts
import { Routes, RouterModule } from '@angular/router'
import { HomeComponent } from './Home/home.module.ts' // HomeComponent not found
const appRoutes: Routes = [
{ path: '', component: HomeComponent }
];
export const appRoutingProviders: any[] = [
];
export const routing = RouterModule.forRoot(appRoutes);
Run Code Online (Sandbox Code Playgroud)
home.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HomeComponent } from './home.component.ts';
@NgModule({
imports: [ BrowserModule ],
declarations: [ HomeComponent ],
exports: [ HomeComponent ]
})
export class HomeModule { }
Run Code Online (Sandbox Code Playgroud)
home.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'home',
template: '<h1>Hello World</h1>'
})
export class HomeComponent { }
Run Code Online (Sandbox Code Playgroud)
为什么HomeModule不能导出其组件?
Joh*_*Siu 12
参考文献1:http: //angularjs.blogspot.com/2016/08/angular2-rc5-ngmodules-lazy-loading.html Ref2:https://angular.io/docs/ts/latest/guide/ngmodule.html #!#进口
import { HomeComponent } from './Home/home.module.ts' // HomeComponent not found
Run Code Online (Sandbox Code Playgroud)
home.module.ts出口HomeModule,不是HomeComponent.
@NgModule导出使导入模块可用的导出组件的Angular2 功能.功能可以是模板指令,选择器,可注射服务等.
主要组件功能是其选择器.因此,导入HomeModuleapp.module将使HomeComponent选择器home可用于任何app.module的组件.
要使HomeModule显式导出HomeComponent,需要index.js和index.d.ts.(灵感来自Fabio Antunes的回答)
home要使用它,exports: [ HomeComponent ]在home.module.ts中是必需的.
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HomeModule } from './Home/home.module';
import { routing } from './app.routing';
@NgModule({
imports: [
BrowserModule,
HomeModule,
routing],
declarations: [
AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
app.component.ts使用选择器home
import {Component} from '@angular/core';
@Component({
selector: 'app-component',
template: `
<h1>{{title}}</h1>
<home></home>`
})
export class AppComponent {
title = 'APP';
}
Run Code Online (Sandbox Code Playgroud)
要直接使用HomeComponent,我们需要将index.js和index.d.ts添加到./Home中
./Home/index.js
exports.HomeModule = require('./home.module').HomeModule;
exports.HomeComponent = require('./home.component').HomeComponent;
Run Code Online (Sandbox Code Playgroud)
./Home/index.d.ts
exports * './home.module';
exports * from './home.component';
Run Code Online (Sandbox Code Playgroud)
然后像npm包一样导入Home Module
app.routing.ts
// We are importing the module directory, not ./Home/home.module.ts
import { HomeComponent } from './Home';
import { Routes, RouterModule } from '@angular/router'
const appRoutes: Routes = [
{ path: '', component: HomeComponent }
];
export const appRoutingProviders: any[] = [
];
export const routing = RouterModule.forRoot(appRoutes);
Run Code Online (Sandbox Code Playgroud)
要路由到模块,子模块需要有自己的路由器设置.
loadChildren在父路由中使用(app.routing.ts).
用于RouterModule.forChild子路由(home.routing.ts).
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { HomeModule } from './Home/home.module';
import { routing } from './app.routing';
@NgModule({
imports: [
BrowserModule,
HomeModule,
routing],
declarations: [
AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
app.component.ts
import {Component} from '@angular/core';
@Component({
selector: 'app-component',
template: `
<h1>{{title}}</h1>
<nav>
<a routerLink="/home" routerLinkActive="active">Home</a>
</nav>
<router-outlet></router-outlet>`
})
export class AppComponent {
title = 'APP';
}
Run Code Online (Sandbox Code Playgroud)
app.routing.ts
import { Routes, RouterModule } from '@angular/router';
const appRoutes: Routes = [
{
path: '',
redirectTo: '/home',
pathMatch: 'full'
},
{
path: 'home',
loadChildren: './Home/home.module'
}
];
export const appRoutingProviders: any[] = [
];
export const routing = RouterModule.forRoot(appRoutes);
Run Code Online (Sandbox Code Playgroud)
首页/ home.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HomeComponent } from './home.component';
import { routing } from './home.routing';
@NgModule({
imports: [
BrowserModule,
routing],
declarations: [
HomeComponent]
})
export class HomeModule { }
Run Code Online (Sandbox Code Playgroud)
首页/ home.routing.ts
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home.component';
const homeRoutes: Routes = [
{
path: '',
redirectTo: '/home',
pathMatch: 'full'
},
{
path: 'home',
component: HomeComponent
}
];
export const appRoutingProviders: any[] = [
];
export const routing = RouterModule.forChild(homeRoutes);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11305 次 |
| 最近记录: |