angular - Angular5 组件不适用于自定义模块(添加时会导致页面挂起)
问题描述
我已将以下组件导入到 admin.module.ts 并且它们工作正常:
ManageSpecialistsComponent
ManageSpecialistComponent
奇怪的是,当我尝试将 ReactiveModelFormComponent 添加到 admin.module.ts 时它不起作用。但是,当它添加到 app.module.ts 时,它可以正常工作。当我将其他新组件添加到 admin.module.ts 模块时,它们会起作用。我想也许我需要为 admin.module.ts 中的 ReactiveModelFormComponent 导入 ReactiveFormsModule 但仅添加此模块也会导致页面挂起。
我究竟做错了什么?我要做的就是让 ReactiveModelFormComponent 在 admin.module.ts 中工作以在页面中使用。
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { RouterModule, Routes } from '@angular/router';
import { HttpClientModule } from '@angular/common/http';
import 'rxjs/Rx';
import { AppComponent } from './app.component';
import { LoginComponent } from './home/login.component';
//base pages
import { AboutComponent } from './pages/base/about/about.component';
import { HomeComponent } from './pages/base/home/home.component';
/* Feature Modules */
import { UserModule } from './user/user.module';
import { ExpenseModule } from './expense/expense.module';
import { AdminModule } from './pages/admin/admin.module';
/* common Modules */
import { ToastrService } from './common/toastr.service';
import { NavBarComponent } from './nav-bar/nav-bar.component';
//for testing remove if not working
//import { ReactiveModelFormComponent } from './reactive-model-form/reactive-model-form.component';
//import { TestComponent } from './test/test.component';
const appRoutes: Routes = [
{ path: 'login', component: LoginComponent},
{ path: 'about', component: AboutComponent},
//{ path: 'form', component: ReactiveModelFormComponent},
{ path: '', redirectTo: 'login', pathMatch: 'full' },
{ path: '**', redirectTo: 'login', pathMatch: 'full' }
];
@NgModule({
imports: [
AdminModule,
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpModule,
HttpClientModule,
UserModule,
ExpenseModule,
RouterModule.forRoot(
appRoutes
)
],
declarations: [
AppComponent,
HomeComponent,
LoginComponent,
AboutComponent,
NavBarComponent
//SpecialistZipComponent
],
exports: [],
bootstrap: [AppComponent],
providers: [ToastrService]
})
export class AppModule { }
admin.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { RouterModule} from '@angular/router';
import { AuthGuard } from '../../user/auth-guard.service';
import { AuthService } from '../..//user/auth.service';
import { ManageSpecialistComponent } from './manage-specialist/manage-specialist.component';
import { ManageSpecialistsComponent } from 'app/pages/admin/manage-specialists/manage-specialists.component';
import { AdminService } from './admin.service';
//may have to remove this service
import { SpecialistsSearchService } from './manage-specialists/specialists-search.service';
//this component does not work
import { ReactiveModelFormComponent } from '../../reactive-model-form/reactive-model-form.component';
//import { ReactiveFormsModule } from '@angular/forms';
import { Test2Component } from './test2/test2.component';
//try fix from stackoverflow for ReactiveModelFormComponent
import { CommonModule } from '@angular/common';
@NgModule({
imports: [
BrowserModule, CommonModule,
RouterModule.forChild([
//{ path: 'admin', component: Test2Component },
{ path: 'admin/manage-specialist/:id', component: ManageSpecialistComponent },
{ path: 'admin/manage-specialists', canActivate: [ AuthGuard], component: ManageSpecialistsComponent }
])
],
declarations: [
ManageSpecialistComponent,
ManageSpecialistsComponent, ReactiveModelFormComponent
],
//exports may need to be removed.. just a test
exports: [
ReactiveModelFormComponent
],
providers: [
AuthService,
AuthGuard,
AdminService,
SpecialistsSearchService
]
})
export class AdminModule {}
反应模型form.component.html(根据要求)
<input type="search"
class="form-control"
placeholder="Please enter search term"
[formControl]="searchField">
<hr/>
<ul>
<li *ngFor="let search of searches">{{ search }}</li>
</ul>
反应模型form.component.ts
import {
NgModule,
Component,
OnInit
} from '@angular/core';
import {
ReactiveFormsModule,
FormControl
} from '@angular/forms';
import {BrowserModule} from '@angular/platform-browser';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import 'rxjs/Rx';
@Component({
selector: 'app-reactive-model-form',
templateUrl: './reactive-model-form.component.html',
styleUrls: ['./reactive-model-form.component.css']
})
export class ReactiveModelFormComponent implements OnInit {
constructor() { }
searchField: FormControl;
searches: string[] = [];
ngOnInit() {
this.searchField = new FormControl();
this.searchField.valueChanges
.debounceTime(400)
.distinctUntilChanged()
.subscribe(term => {
this.searches.push(term);
alert(term);
});
}
}
解决方案
看一下这个:
- 在 AppModule 中,将特色管理模块移动到导入的底部。
- BrowserModule只需要在 app.module 中导入一次。对于功能模块,请改为导入CommonModule。资料来源:角度指南:
- 我认为您还需要将ReactiveFormsModule重新添加到 Admin 模块,因为您的组件需要它才能工作。
管理模块
imports: [ CommonModule, FormsModule, ReactiveFormsModule, RouterModule.forChild ]
应用模块
imports: [ BrowserModule etc... AdminModule
我希望这能解决你的问题,阿德里安!
推荐阅读
- amazon-web-services - AWS DynamoDB 数据映射器:查询条件缺少关键架构元素
- machine-learning - 什么是物体检测“头”?
- haskell - Haskell 基于语法生成无限流
- wpf - 引用的外部命名空间与本地命名空间崩溃
- algorithm - 笛卡尔幂 - 通过递归
- php - MySQLi 准备好的语句失败并且不会被执行
- hadoop - cloudera BDR HDFS复制和快照有什么区别
- python - 使用 format() 居中对齐并设置作为输入给出的精度
- php - 跨站点脚本 PHP 获取 URL 问题
- spring - 如何将路由公开为服务,以便我们可以在运行时启动或停止路由