HTTP 请求未触发
HTTP request doesn't fire off
我是 Angular 的新手,正在观看视频教程来发出 HTTP 请求并获取响应数据。出于某种原因,我使用的代码没有触发 http.get.
import { Component, Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
@Injectable()
export class AppComponent {
constructor( private http: Http ){
console.log('Until here works');
this.http.get('https://jsonplaceholder.typicode.com/posts').map(data => {
console.log('Finished');
console.log( data );
});
}
}
这是来自文档:
The http.get does not send the request just yet. This Observable is cold, which means that the request won't go out until something subscribes to the Observable.
查看此 link 了解更多信息和详细示例:https://angular.io/docs/ts/latest/guide/server-communication.html
这里有一个具体的例子:
getProducts(): Observable<IProduct[]> {
return this._http.get(this._productUrl)
.map((response: Response) => <IProduct[]> response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}
然后这样订阅:
ngOnInit(): void {
this._productService.getProducts()
.subscribe(products => this.products = products,
error => this.errorMessage = <any>error);
}
我们使用服务来最大限度地减少代码行数和开发时间。
使用 angular-cli 命令创建一个单独的服务 ng g s Get
这将为 you.but 创建一项新服务,您需要像这样将其添加为 app.module.ts 中的提供商。
或者,如果您没有使用 anular-cli,请创建一个文件 get.service.ts 文件并按照以下步骤操作
检查我制作的这个示例应用程序。
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { GetService } from './get.service';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [GetService],
bootstrap: [AppComponent]
})
export class AppModule { }
将这些代码添加到 get.service.ts
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class GetService {
constructor(private http: Http) { }
getData() {
this.http.get('https://jsonplaceholder.typicode.com/posts').map(m => m.json()
).subscribe(k => { console.log(k) }); // we have to subscribe for get data out
}
}
app.component.ts应该是这样的
import { Component,Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { GetService } from './get.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app works!';
constructor(private _service : GetService ){
this._service.getData();
}
}
阅读有关服务的更多信息here
您必须使用服务而不是直接在组件中使用它,因为服务可以使用 Angular 依赖注入来重用。
如果您是新手,我建议您使用一次服务,因为这些是 angular 申请的组成部分。
我有一个处理一些基本问题的 Repo Angular 概念和服务就是其中之一12=]
我是 Angular 的新手,正在观看视频教程来发出 HTTP 请求并获取响应数据。出于某种原因,我使用的代码没有触发 http.get.
import { Component, Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
@Injectable()
export class AppComponent {
constructor( private http: Http ){
console.log('Until here works');
this.http.get('https://jsonplaceholder.typicode.com/posts').map(data => {
console.log('Finished');
console.log( data );
});
}
}
这是来自文档:
The http.get does not send the request just yet. This Observable is cold, which means that the request won't go out until something subscribes to the Observable.
查看此 link 了解更多信息和详细示例:https://angular.io/docs/ts/latest/guide/server-communication.html
这里有一个具体的例子:
getProducts(): Observable<IProduct[]> {
return this._http.get(this._productUrl)
.map((response: Response) => <IProduct[]> response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}
然后这样订阅:
ngOnInit(): void {
this._productService.getProducts()
.subscribe(products => this.products = products,
error => this.errorMessage = <any>error);
}
我们使用服务来最大限度地减少代码行数和开发时间。
使用 angular-cli 命令创建一个单独的服务 ng g s Get
这将为 you.but 创建一项新服务,您需要像这样将其添加为 app.module.ts 中的提供商。
或者,如果您没有使用 anular-cli,请创建一个文件 get.service.ts 文件并按照以下步骤操作
检查我制作的这个示例应用程序。
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { GetService } from './get.service';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [GetService],
bootstrap: [AppComponent]
})
export class AppModule { }
将这些代码添加到 get.service.ts
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class GetService {
constructor(private http: Http) { }
getData() {
this.http.get('https://jsonplaceholder.typicode.com/posts').map(m => m.json()
).subscribe(k => { console.log(k) }); // we have to subscribe for get data out
}
}
app.component.ts应该是这样的
import { Component,Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { GetService } from './get.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app works!';
constructor(private _service : GetService ){
this._service.getData();
}
}
阅读有关服务的更多信息here
您必须使用服务而不是直接在组件中使用它,因为服务可以使用 Angular 依赖注入来重用。 如果您是新手,我建议您使用一次服务,因为这些是 angular 申请的组成部分。
我有一个处理一些基本问题的 Repo Angular 概念和服务就是其中之一12=]