ril*_*009 7 typescript angular
我在使用angular 4和observable时遇到错误.
/ Users//backend/src/app/app.component.ts(15,55):输入'()=> any'不能赋值为'State []'./ Users / /backend/src/app/app.component.ts(15,55):输入'()=> any'不能赋值为'State []'.类型'()=>任何'中缺少属性'includes'.
我究竟做错了什么
我的模特
export class State {
id: number;
state: string;
code: string;
}
Run Code Online (Sandbox Code Playgroud)
我的服务
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/toPromise';
import {environment} from '../../../environments/environment';
@Injectable()
export class StateService {
private baseUrl: string = environment.baseUrl;
constructor( private http: Http) {}
/**
* Get all States
*/
GetStates() {
return this.http.get(this.baseUrl + 'v1/states')
.map((res: Response) => res.json);
// .do( data => console.log(data));
}
}
Run Code Online (Sandbox Code Playgroud)
我的组件
import { Component, OnInit } from '@angular/core';
import {StateService} from './shared/services/state.service';
import {State} from './shared/models/state';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styles: []
})
export class AppComponent implements OnInit {
states: State[] ;
constructor(private stateService: StateService) {}
ngOnInit() {
this.stateService.GetStates().subscribe(states => this.states = states );
}
}
Run Code Online (Sandbox Code Playgroud)
App.Module
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import 'rxjs/add/operator/map';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { StateService } from './shared/services/state.service';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule
],
providers: [
StateService
],
bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
Dav*_*d L 10
有两个问题.
首先,您不是在调用json响应,而只是引用该方法.您需要更改res.json
为res.json()
:
.map((res: Response) => res.json());
Run Code Online (Sandbox Code Playgroud)
其次,您没有声明订阅结果的类型.您应该明确指定结果的类型:
this.stateService.GetStates().subscribe((states: State[]) => this.states = states);
Run Code Online (Sandbox Code Playgroud)
由于您订阅的参数是类型any
,除非您像上面一样预先指定类型,或者在赋值之前将其强制转换,否则typescript编译器会通知您类型无效.
归档时间: |
|
查看次数: |
34674 次 |
最近记录: |