Hello,
I am using Angular2 beta 12 running in VS2015. When I update to rxjs from 5.0.0-beta.2 to beta.3 I encounter a range of exceptions generally relating to my promises.
E.g.
map
does not exist on type Observable<Response>
share
does not exist in type Observable<Response>
Package.json
{
"name": "ASP.NET",
"version": "0.0.0",
"scripts": {
"tsc": "tsc",
"tsc:w": "tsc -w",
"lite": "lite-server",
"start": "concurrent \"npm run tsc:w\" \"npm run lite\" "
},
"dependencies": {
"angular2": "2.0.0-beta.12",
"systemjs": "0.19.24",
"es6-promise": "3.1.2",
"es6-shim": "0.35.0",
"reflect-metadata": "0.1.3",
"rxjs": "5.0.0-beta.3", // beta.2 allowed project to build
"zone.js":"0.6.6"
},
"devDependencies": {
"gulp": "3.9.1",
"gulp-concat": "2.6.0",
"gulp-cssmin": "0.1.7",
"gulp-uglify": "1.5.3",
"rimraf": "2.2.8",
"concurrently": "2.0.0",
"lite-server": "2.1.0",
"typescript": "1.8.9"
}
}
Issue relates to map function in this code:
import {Injectable} from 'angular2/core';
import {Http, Response} from 'angular2/http';
import {Headers, RequestOptions} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
import {ApplicationVM} from '../../Applications/ViewModels/Application.ViewModel';
@Injectable()
export class ApplicationService {
constructor(private http: Http) { }
private _serviceUrl = './../api/';
getApplications() {
return this.http.get(this._serviceUrl + "applications/active")
.map(res => <ApplicationVM[]>res.json())
// .map((res: Response) => res.json())
.do(data => console.log(data)) // eyeball results in the console
.catch(this.handleError);
}
private handleError(error: Response) {
console.log(error);
return Observable.throw(error.json().error || 'Server error');
}
}
In another, the problem is with share()
constructor(private _http: Http) {
console.log("constructor");
this.menulist$ = new Observable(observer => this._menulistObserver = observer).share();
this.menuState$ = new Observable(observer => this._menuStateObserver = observer).share();
this.menuWidth$ = new Observable(observer => this._menuWidthObserver = observer).share();}
I feel this might be important - a range of rxjs files have underlined red for relative references ../../Observable
(example below is in interval.d.ts)
import { IntervalObservable } from '../../observable/IntervalObservable';
declare module '../../Observable' {
namespace Observable {
let interval: typeof IntervalObservable.create;
}
}
My boot.ts
///<reference path="./../node_modules/angular2/typings/browser.d.ts"/>
import {bootstrap} from 'angular2/platform/browser';
import {ROUTER_PROVIDERS} from 'angular2/router';
import {AppComponent} from './app.component';
import {HTTP_PROVIDERS} from 'angular2/http';
import 'rxjs/Rx'; // kitchen sink
// Bootstrap the application and reference the required directives
bootstrap(AppComponent, [ROUTER_PROVIDERS, HTTP_PROVIDERS]);
My html page
<!-- 1. Load libraries -->
<script src="~/nodelibs/angular2/bundles/angular2-polyfills.js"></script>
<script src="~/nodelibs/systemjs/system.src.js"></script>
<script src="~/nodelibs/typescript/lib/typescript.js"></script>
<script src="~/nodelibs/rxjs/bundles/Rx.js"></script>
<script src="~/nodelibs/angular2/bundles/angular2.dev.js"></script>
<script src="~/nodelibs/angular2/bundles/router.dev.js"></script>
<script src="~/nodelibs/angular2/bundles/http.dev.js"></script>
<!-- 2. Configure SystemJS -->
<script>
var rootPath = "@Url.Content("~/")";
System.config({
//transpiler: 'typescript',
//typescriptOptions: { emitDecoratorMetadata: true },
baseURL: rootPath,
defaultJSExtensions: true,
packages: {
app: {
//format: 'register',
defaultExtension: 'js'
}, map: {
'rxjs/observable/*' : 'nodelibs/rxjs/observable/*.js',
'rxjs/operators/*' : 'nodelibs/rxjs/operators/*.js',
'rxjs/*' : 'nodelibs/rxjs/*.js'
}
}
});
System.import("/app/boot.js")
.then(null, console.error.bind(console));
</script>
I'm stumped and would appreciated some assistance.
Thank, Dan.
Regarding operators, you need to import them manually since they aren't included in the Observable class by default.
For this you can do either:
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/share';
Or (to include all operators):
import {Observable} from 'rxjs/Rx';
Otherwise normally you don't need to define rxjs into your SystemJS configuration in the map block. Including the corresponding bundled file into a script tag is enough.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With