这是我的package.json
文件:
"dependencies": {
"@angular/animations": "~7.1.0",
"@angular/common": "~7.1.0",
"@angular/compiler": "~7.1.0",
"@angular/core": "~7.1.0",
"@angular/forms": "~7.1.0",
"@angular/material": "^7.1.1",
"@angular/platform-browser": "~7.1.0",
"@angular/platform-browser-dynamic": "~7.1.0",
"@angular/router": "~7.1.0",
"core-js": "^2.5.4",
"ng2-opd-popup": "^1.1.21",
"rxjs": "~6.3.3",
"tslib": "^1.9.0",
"zone.js": "~0.8.26"
service.ts
文件代码如下:
import { Injectable } from '@angular/core';
import { Http, Headers} from '@angular/http';
import 'rxjs/add/operator/map';
//import { Observable } from 'rxjs/Observable';
//import 'rxjs/add/observable';
import { Observable} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class EmpService {
employees=[];
constructor(private _http: Http) { }
addEmployee(info){
return this._http.post("http://localhost/data/insert.php",info)
.map(()=>"");
}
}
我收到以下错误:
rxjs没有导出成员'Observable'
版本中有任何问题吗?
要符合rxjs6和angular 7,您必须替换:
import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/map';
通过:
import { map } from 'rxjs/operators';
import { HttpClient, HttpHeaders } from '@angular/common/http';
并导入Observable:
import { Observable } from 'rxjs';
不是这样的:
import { Observable } from 'rxjs/Observable';
// or import 'rxjs/add/observable';
您可能需要删除node_modules
文件夹并启动npm install
,因为它似乎有一些错误的包。
您的代码是用旧的角度版本编写的。需要改变的是
1. Use of Http is deprecated
2. importing map & Observable
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { map } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class EmpService {
employees=[];
constructor(private _http: HttpClient) { }
addEmployee(info){
return this._http.post("http://localhost/data/insert.php",info)
.pipe(
map(() => '' )
)
}
}
参考:
认为您的问题与错误的包装有关,因为您的方式是正确的。在Angular 7中使用Observable
的正确方法是import { Observable } from 'rxjs';
不确定你是否从Angular 6升级到upgrade docs:
从HttpModule和Http服务切换到HttpClientModule和HttpClient服务。 HttpClient简化了默认的人机工程学(您不再需要映射到json),现在支持类型返回值和拦截器。阅读angular.io的更多信息
使用rxjs-tslint自动更新规则删除已弃用的RxJS 6功能
对于大多数应用程序,这将意味着运行以下两个命令:
npm install -g rxjs-tslint rxjs-5-to-6-migrate -p src / tsconfig.app.json
一旦您和所有依赖项更新为RxJS 6,请删除rxjs-compat。
解决此问题后,运行npm install
另一种可能性是缓存node_modules
可以删除:git rm -r --cached node_modules
你可能有一些所以,一旦清理,运行npm install
,你应该有正确的包。