我通过运行ng new first-project
安装了准系统的Angle 6项目,并获得了默认的应用程序模块和组件。现在,我通过运行ng generate module view
和ng generate component view/view
在其中创建了一个新模块和一个组件。
现在我的app.module.ts看起来像这样
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { TestService } from './test.service';
import { ViewModule } from './view/view.module';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
FormsModule,
HttpClientModule,
ViewModule
],
providers: [
TestService
],
bootstrap: [AppComponent]
})
export class AppModule { }
view.module.ts
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { ViewComponent } from './view/view.component';
@NgModule({
declarations: [ViewComponent],
imports: [
CommonModule,
FormsModule
],
exports: [
ViewComponent
]
})
export class ViewModule { }
view.component.ts
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-view',
templateUrl: './view.component.html',
styleUrls: ['./view.component.css']
})
export class ViewComponent implements OnInit {
username: string = "";
response: any;
constructor (private http: HttpClient) { }
search () {
this.http.get('https://api.github.com/users/' + this.username)
.subscribe((response) => {
this.response = response;
console.log(this.response);
});
}
}
问题是,我没有在view.module.ts内导入HttpClientModule
,而是在app.module.ts内导入,我直接在view.component.ts内导入HttpClient
我什至得到了回应。
为了测试这种情况是否经常发生,我从view.module.ts中删除了FormsModule
导入,以查看我在view.component.html内部使用的[(ngModel)]
是否仍然有效,因为我已经导入了{{ 1}}放在app.module.ts中,但是没有。
我的问题是,为什么HttpClientModule允许我将其导入并在不同模块中使用它,为什么其他模块不能那样工作? 我试图在网上找到原因,但找不到。谁能告诉我原因?谢谢。
其他信息:
1.如果我未在任何地方导入FormsModule
,则HttpClient
不起作用。
因此,需要将模块导入项目中的某个位置。
2.它也以另一种方式工作,即,将模块导入view.module.ts内部,并在app.component.ts内部使用。这意味着,我只需在模块中导入一次即可在整个项目中使用HttpClientModule
。
答案 0 :(得分:2)
根据Angular的official document,不需要将HttpClientModule
导入view.module.ts
中,只要将其导入AppModule.ts
中即可。
这是该网站的报价:
在使用HttpClient之前,需要导入Angular
HttpClientModule
。大多数应用程序都是在根AppModule中这样做的。 将HttpClientModule
导入AppModule后,您可以将HttpClient
注入到应用程序类中,如下面的ConfigService
示例所示。