/** * @license * Copyright Google Inc. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import { Attribute, ComponentFactoryResolver, Directive, EventEmitter, Output, ReflectiveInjector, ViewContainerRef } from '@angular/core'; import { RouterOutletMap } from '../router_outlet_map'; import { PRIMARY_OUTLET } from '../shared'; /** * \@whatItDoes Acts as a placeholder that Angular dynamically fills based on the current router * state. * * \@howToUse * * ``` * * * * ``` * * A router outlet will emit an activate event any time a new component is being instantiated, * and a deactivate event when it is being destroyed. * * ``` * * ``` * \@selector 'a[routerLink]' * \@ngModule RouterModule * * \@stable */ export var RouterOutlet = (function () { /** * @param {?} parentOutletMap * @param {?} location * @param {?} resolver * @param {?} name */ function RouterOutlet(parentOutletMap, location, resolver, name) { this.parentOutletMap = parentOutletMap; this.location = location; this.resolver = resolver; this.name = name; this.activateEvents = new EventEmitter(); this.deactivateEvents = new EventEmitter(); parentOutletMap.registerOutlet(name ? name : PRIMARY_OUTLET, this); } /** * @return {?} */ RouterOutlet.prototype.ngOnDestroy = function () { this.parentOutletMap.removeOutlet(this.name ? this.name : PRIMARY_OUTLET); }; Object.defineProperty(RouterOutlet.prototype, "locationInjector", { /** * @return {?} */ get: function () { return this.location.injector; }, enumerable: true, configurable: true }); Object.defineProperty(RouterOutlet.prototype, "locationFactoryResolver", { /** * @return {?} */ get: function () { return this.resolver; }, enumerable: true, configurable: true }); Object.defineProperty(RouterOutlet.prototype, "isActivated", { /** * @return {?} */ get: function () { return !!this.activated; }, enumerable: true, configurable: true }); Object.defineProperty(RouterOutlet.prototype, "component", { /** * @return {?} */ get: function () { if (!this.activated) throw new Error('Outlet is not activated'); return this.activated.instance; }, enumerable: true, configurable: true }); Object.defineProperty(RouterOutlet.prototype, "activatedRoute", { /** * @return {?} */ get: function () { if (!this.activated) throw new Error('Outlet is not activated'); return this._activatedRoute; }, enumerable: true, configurable: true }); /** * @return {?} */ RouterOutlet.prototype.detach = function () { if (!this.activated) throw new Error('Outlet is not activated'); this.location.detach(); var /** @type {?} */ r = this.activated; this.activated = null; this._activatedRoute = null; return r; }; /** * @param {?} ref * @param {?} activatedRoute * @return {?} */ RouterOutlet.prototype.attach = function (ref, activatedRoute) { this.activated = ref; this._activatedRoute = activatedRoute; this.location.insert(ref.hostView); }; /** * @return {?} */ RouterOutlet.prototype.deactivate = function () { if (this.activated) { var /** @type {?} */ c = this.component; this.activated.destroy(); this.activated = null; this._activatedRoute = null; this.deactivateEvents.emit(c); } }; /** * @param {?} activatedRoute * @param {?} resolver * @param {?} injector * @param {?} providers * @param {?} outletMap * @return {?} */ RouterOutlet.prototype.activate = function (activatedRoute, resolver, injector, providers, outletMap) { if (this.isActivated) { throw new Error('Cannot activate an already activated outlet'); } this.outletMap = outletMap; this._activatedRoute = activatedRoute; var /** @type {?} */ snapshot = activatedRoute._futureSnapshot; var /** @type {?} */ component = (snapshot._routeConfig.component); var /** @type {?} */ factory = resolver.resolveComponentFactory(component); var /** @type {?} */ inj = ReflectiveInjector.fromResolvedProviders(providers, injector); this.activated = this.location.createComponent(factory, this.location.length, inj, []); this.activated.changeDetectorRef.detectChanges(); this.activateEvents.emit(this.activated.instance); }; RouterOutlet.decorators = [ { type: Directive, args: [{ selector: 'router-outlet' },] }, ]; /** @nocollapse */ RouterOutlet.ctorParameters = function () { return [ { type: RouterOutletMap, }, { type: ViewContainerRef, }, { type: ComponentFactoryResolver, }, { type: undefined, decorators: [{ type: Attribute, args: ['name',] },] }, ]; }; RouterOutlet.propDecorators = { 'activateEvents': [{ type: Output, args: ['activate',] },], 'deactivateEvents': [{ type: Output, args: ['deactivate',] },], }; return RouterOutlet; }()); function RouterOutlet_tsickle_Closure_declarations() { /** @type {?} */ RouterOutlet.decorators; /** * @nocollapse * @type {?} */ RouterOutlet.ctorParameters; /** @type {?} */ RouterOutlet.propDecorators; /** @type {?} */ RouterOutlet.prototype.activated; /** @type {?} */ RouterOutlet.prototype._activatedRoute; /** @type {?} */ RouterOutlet.prototype.outletMap; /** @type {?} */ RouterOutlet.prototype.activateEvents; /** @type {?} */ RouterOutlet.prototype.deactivateEvents; /** @type {?} */ RouterOutlet.prototype.parentOutletMap; /** @type {?} */ RouterOutlet.prototype.location; /** @type {?} */ RouterOutlet.prototype.resolver; /** @type {?} */ RouterOutlet.prototype.name; } //# sourceMappingURL=router_outlet.js.map