refactor(router): use ApplicationRef to provide the first bootstrapped component as ROUTER_PRIMARY_COMPONENT automatically.
This removes the routerBindings function as it is no longer necessary. ROUTER_BINDINGS will automatically pick the first bootstrapped component to satisfy ROUTER_PRIMARY_COMPONENT. BREAKING CHANGE: Before: bootstrap(MyComponent, [routerBindings(myComponent)]); After: bootstrap(MyComponent, [ROUTER_BINDINGS]); Closes #4643
This commit is contained in:
@@ -230,9 +230,10 @@ export class PlatformRef_ extends PlatformRef {
|
||||
|
||||
private _initApp(zone: NgZone, bindings: Array<Type | Binding | any[]>): ApplicationRef {
|
||||
var injector: Injector;
|
||||
var app: ApplicationRef;
|
||||
zone.run(() => {
|
||||
bindings.push(bind(NgZone).toValue(zone));
|
||||
bindings.push(bind(ApplicationRef).toValue(this));
|
||||
bindings.push(bind(ApplicationRef).toFactory((): ApplicationRef => app, []));
|
||||
|
||||
var exceptionHandler;
|
||||
try {
|
||||
@@ -247,7 +248,7 @@ export class PlatformRef_ extends PlatformRef {
|
||||
}
|
||||
}
|
||||
});
|
||||
var app = new ApplicationRef_(this, zone, injector);
|
||||
app = new ApplicationRef_(this, zone, injector);
|
||||
this._applications.push(app);
|
||||
return app;
|
||||
}
|
||||
@@ -312,11 +313,17 @@ export abstract class ApplicationRef {
|
||||
* Dispose of this application and all of its components.
|
||||
*/
|
||||
abstract dispose(): void;
|
||||
|
||||
/**
|
||||
* Get a list of component types registered to this application.
|
||||
*/
|
||||
get componentTypes(): Type[] { return unimplemented(); };
|
||||
}
|
||||
|
||||
export class ApplicationRef_ extends ApplicationRef {
|
||||
private _bootstrapListeners: Function[] = [];
|
||||
private _rootComponents: ComponentRef[] = [];
|
||||
private _rootComponentTypes: Type[] = [];
|
||||
|
||||
constructor(private _platform: PlatformRef_, private _zone: NgZone, private _injector: Injector) {
|
||||
super();
|
||||
@@ -334,6 +341,7 @@ export class ApplicationRef_ extends ApplicationRef {
|
||||
componentBindings.push(bindings);
|
||||
}
|
||||
var exceptionHandler = this._injector.get(ExceptionHandler);
|
||||
this._rootComponentTypes.push(componentType);
|
||||
try {
|
||||
var injector: Injector = this._injector.resolveAndCreateChild(componentBindings);
|
||||
var compRefToken: Promise<ComponentRef> = injector.get(APP_COMPONENT_REF_PROMISE);
|
||||
@@ -369,4 +377,6 @@ export class ApplicationRef_ extends ApplicationRef {
|
||||
this._rootComponents.forEach((ref) => ref.dispose());
|
||||
this._platform._applicationDisposed(this);
|
||||
}
|
||||
|
||||
get componentTypes(): any[] { return this._rootComponentTypes; }
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import {EventListener, History, Location} from 'angular2/src/core/facade/browser
|
||||
* import {Component, View} from 'angular2/angular2';
|
||||
* import {
|
||||
* ROUTER_DIRECTIVES,
|
||||
* routerBindings,
|
||||
* ROUTER_BINDINGS,
|
||||
* RouteConfig,
|
||||
* Location
|
||||
* } from 'angular2/router';
|
||||
@@ -34,9 +34,7 @@ import {EventListener, History, Location} from 'angular2/src/core/facade/browser
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* bootstrap(AppCmp, [
|
||||
* routerBindings(AppCmp)
|
||||
* ]);
|
||||
* bootstrap(AppCmp, [ROUTER_BINDINGS]);
|
||||
* ```
|
||||
*/
|
||||
@Injectable()
|
||||
|
||||
@@ -16,7 +16,7 @@ import {Url} from './url_parser';
|
||||
*
|
||||
* ```
|
||||
* import {bootstrap, Component, View} from 'angular2/angular2';
|
||||
* import {Router, ROUTER_DIRECTIVES, routerBindings, RouteConfig} from 'angular2/router';
|
||||
* import {Router, ROUTER_DIRECTIVES, ROUTER_BINDINGS, RouteConfig} from 'angular2/router';
|
||||
*
|
||||
* @Component({...})
|
||||
* @View({directives: [ROUTER_DIRECTIVES]})
|
||||
@@ -34,7 +34,7 @@ import {Url} from './url_parser';
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* bootstrap(AppCmp, routerBindings(AppCmp));
|
||||
* bootstrap(AppCmp, ROUTER_BINDINGS);
|
||||
* ```
|
||||
*/
|
||||
export class RouteParams {
|
||||
@@ -54,7 +54,7 @@ export class RouteParams {
|
||||
*
|
||||
* ```
|
||||
* import {bootstrap, Component, View} from 'angular2/angular2';
|
||||
* import {Router, ROUTER_DIRECTIVES, routerBindings, RouteConfig} from 'angular2/router';
|
||||
* import {Router, ROUTER_DIRECTIVES, ROUTER_BINDINGS, RouteConfig} from 'angular2/router';
|
||||
*
|
||||
* @Component({...})
|
||||
* @View({directives: [ROUTER_DIRECTIVES]})
|
||||
@@ -68,7 +68,7 @@ export class RouteParams {
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* bootstrap(AppCmp, routerBindings(AppCmp));
|
||||
* bootstrap(AppCmp, ROUTER_BINDINGS);
|
||||
* ```
|
||||
*/
|
||||
export class Instruction {
|
||||
|
||||
@@ -17,7 +17,7 @@ import {OpaqueToken, Injectable, Optional, Inject} from 'angular2/src/core/di';
|
||||
*
|
||||
* ```
|
||||
* import {Component, View} from 'angular2/angular2';
|
||||
* import {ROUTER_DIRECTIVES, routerBindings, RouteConfig} from 'angular2/router';
|
||||
* import {ROUTER_DIRECTIVES, ROUTER_BINDINGS, RouteConfig} from 'angular2/router';
|
||||
*
|
||||
* @Component({...})
|
||||
* @View({directives: [ROUTER_DIRECTIVES]})
|
||||
@@ -29,7 +29,7 @@ import {OpaqueToken, Injectable, Optional, Inject} from 'angular2/src/core/di';
|
||||
* }
|
||||
*
|
||||
* bootstrap(AppCmp, [
|
||||
* routerBindings(AppCmp),
|
||||
* ROUTER_BINDINGS,
|
||||
* PathLocationStrategy,
|
||||
* bind(APP_BASE_HREF).toValue('/my/app')
|
||||
* ]);
|
||||
@@ -59,7 +59,7 @@ export const APP_BASE_HREF: OpaqueToken = CONST_EXPR(new OpaqueToken('appBaseHre
|
||||
* import {Component, View} from 'angular2/angular2';
|
||||
* import {
|
||||
* ROUTER_DIRECTIVES,
|
||||
* routerBindings,
|
||||
* ROUTER_BINDINGS,
|
||||
* RouteConfig,
|
||||
* Location
|
||||
* } from 'angular2/router';
|
||||
@@ -75,7 +75,7 @@ export const APP_BASE_HREF: OpaqueToken = CONST_EXPR(new OpaqueToken('appBaseHre
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* bootstrap(AppCmp, [routerBindings(AppCmp)]);
|
||||
* bootstrap(AppCmp, [ROUTER_BINDINGS]);
|
||||
* ```
|
||||
*/
|
||||
@Injectable()
|
||||
|
||||
@@ -10,7 +10,7 @@ import {LocationStrategy} from './location_strategy';
|
||||
* browser's URL.
|
||||
*
|
||||
* `PathLocationStrategy` is the default binding for {@link LocationStrategy}
|
||||
* provided in {@link routerBindings} and {@link ROUTER_BINDINGS}.
|
||||
* provided in {@link ROUTER_BINDINGS}.
|
||||
*
|
||||
* If you're using `PathLocationStrategy`, you must provide a binding for
|
||||
* {@link APP_BASE_HREF} to a string representing the URL prefix that should
|
||||
@@ -27,7 +27,7 @@ import {LocationStrategy} from './location_strategy';
|
||||
* import {
|
||||
* APP_BASE_HREF
|
||||
* ROUTER_DIRECTIVES,
|
||||
* routerBindings,
|
||||
* ROUTER_BINDINGS,
|
||||
* RouteConfig,
|
||||
* Location
|
||||
* } from 'angular2/router';
|
||||
@@ -44,7 +44,7 @@ import {LocationStrategy} from './location_strategy';
|
||||
* }
|
||||
*
|
||||
* bootstrap(AppCmp, [
|
||||
* routerBindings(AppCmp), // includes binding to PathLocationStrategy
|
||||
* ROUTER_BINDINGS, // includes binding to PathLocationStrategy
|
||||
* bind(APP_BASE_HREF).toValue('/my/app')
|
||||
* ]);
|
||||
* ```
|
||||
|
||||
Reference in New Issue
Block a user