import { map } from 'rxjs/operators';
和import 'rxjs/add/operator/map';
有什么区别?
我在进行登录的服务方法中使用它:
// import { map } from 'rxjs/operators'; // Fails at runtime
import 'rxjs/add/operator/map'; // Works fine at runtime
public login(username: string, password: string): Observable<any> {
console.log('Sending the login credentials to obtain a token');
const credentials = { 'email': username, 'password': password };
return this.httpService.postWithHeadersInResponse(URI_LOGIN, credentials)
.map((response: HttpResponse<any>) => {
const header = response.headers.get(this.authService.getHeaderName());
const token = this.authService.extractTokenFromHeader(header);
console.log('The token from the response header: ' + token);
this.authService.setJwtTokenToLocalStorage(token);
});
}
答案 0 :(得分:3)
区别在于,当您使用rxjs/add/operator/map
时,它会更改Observable的原型,因此您可以使用.
(点)运算符进行链接:
this.httpService.postWithHeadersInResponse(URI_LOGIN, credentials)
.map(...);
但是不建议使用这种使用运算符的方式。 rxjs/operators
的当前方式:
import { map } from 'rxjs/operators';
this.httpService.postWithHeadersInResponse(URI_LOGIN, credentials)
.pipe(map(...));
答案 1 :(得分:1)
RxJs更改了public_api.ts并在rxjs-project中移动了一些新版本的文件(我猜是5.5 +)。
现在正确的方法是:
import { map } from 'rxjs/operators'
另一种方法将在较新的版本中弃用/删除(我在博客的某处读到7.0)。此外,另一种方法仅适用于较新的rxjs-versions中的rxjs-compat。
rxjs-compat不再适用于RxJs 7.0(很有可能)