
committed by
Matias Niemelä

parent
d5cbcef0ea
commit
2c7386c961
@ -8,7 +8,8 @@
|
||||
|
||||
import {ChangeDetectorRef as ViewEngine_ChangeDetectorRef} from '../change_detection/change_detector_ref';
|
||||
import {InjectionToken} from '../di/injection_token';
|
||||
import {Injector, inject} from '../di/injector';
|
||||
import {Injector} from '../di/injector';
|
||||
import {inject} from '../di/injector_compatibility';
|
||||
import {ComponentFactory as viewEngine_ComponentFactory, ComponentRef as viewEngine_ComponentRef} from '../linker/component_factory';
|
||||
import {ComponentFactoryResolver as viewEngine_ComponentFactoryResolver} from '../linker/component_factory_resolver';
|
||||
import {ElementRef as viewEngine_ElementRef} from '../linker/element_ref';
|
||||
|
@ -8,7 +8,8 @@
|
||||
|
||||
import {getInjectableDef, getInjectorDef} from '../di/defs';
|
||||
import {InjectionToken} from '../di/injection_token';
|
||||
import {InjectFlags, Injector, NullInjector, injectRootLimpMode, setInjectImplementation} from '../di/injector';
|
||||
import {Injector} from '../di/injector';
|
||||
import {InjectFlags, injectRootLimpMode, setInjectImplementation} from '../di/injector_compatibility';
|
||||
import {Type} from '../type';
|
||||
|
||||
import {assertDefined, assertEqual} from './assert';
|
||||
@ -506,6 +507,26 @@ function shouldSearchParent(flags: InjectFlags, parentLocation: RelativeInjector
|
||||
(flags & InjectFlags.Host && getParentInjectorViewOffset(parentLocation) > 0));
|
||||
}
|
||||
|
||||
export function injectInjector() {
|
||||
const tNode = getPreviousOrParentTNode() as TElementNode | TContainerNode | TElementContainerNode;
|
||||
return new NodeInjector(tNode, getViewData());
|
||||
}
|
||||
|
||||
export class NodeInjector implements Injector {
|
||||
private _injectorIndex: number;
|
||||
|
||||
constructor(
|
||||
private _tNode: TElementNode|TContainerNode|TElementContainerNode,
|
||||
private _hostView: LViewData) {
|
||||
this._injectorIndex = getOrCreateNodeInjectorForNode(_tNode, _hostView);
|
||||
}
|
||||
|
||||
get(token: any): any {
|
||||
setTNodeAndViewData(this._tNode, this._hostView);
|
||||
return getOrCreateInjectable(this._tNode, this._hostView, token);
|
||||
}
|
||||
}
|
||||
|
||||
export function getFactoryOf<T>(type: Type<any>): ((type: Type<T>| null) => T)|null {
|
||||
const typeAny = type as any;
|
||||
const def = getComponentDef<T>(typeAny) || getDirectiveDef<T>(typeAny) ||
|
||||
|
@ -38,14 +38,14 @@ export function getComponent<T = {}>(target: {}): T|null {
|
||||
const context = loadContext(target) !;
|
||||
|
||||
if (context.component === undefined) {
|
||||
let lViewData = context.lViewData;
|
||||
let lViewData: LViewData|null = context.lViewData;
|
||||
while (lViewData) {
|
||||
const ctx = lViewData ![CONTEXT] !as{};
|
||||
if (ctx && isComponentInstance(ctx)) {
|
||||
context.component = ctx;
|
||||
break;
|
||||
}
|
||||
lViewData = lViewData ![PARENT] !;
|
||||
lViewData = lViewData[FLAGS] & LViewFlags.IsRoot ? null : lViewData ![PARENT] !;
|
||||
}
|
||||
if (context.component === undefined) {
|
||||
context.component = null;
|
||||
|
@ -9,7 +9,7 @@
|
||||
import './ng_dev_mode';
|
||||
|
||||
import {InjectionToken} from '../di/injection_token';
|
||||
import {InjectFlags} from '../di/injector';
|
||||
import {InjectFlags} from '../di/injector_compatibility';
|
||||
import {QueryList} from '../linker';
|
||||
import {Sanitizer} from '../sanitization/security';
|
||||
import {StyleSanitizeFn} from '../sanitization/style_sanitizer';
|
||||
|
@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
import {InjectionToken} from '../../di/injection_token';
|
||||
import {InjectFlags} from '../../di/injector';
|
||||
import {InjectFlags} from '../../di/injector_compatibility';
|
||||
import {Type} from '../../type';
|
||||
import {TElementNode} from './node';
|
||||
import {LViewData, TData} from './view';
|
||||
|
@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
import {defineInjectable, defineInjector,} from '../../di/defs';
|
||||
import {inject} from '../../di/injector';
|
||||
import {inject} from '../../di/injector_compatibility';
|
||||
import * as r3 from '../index';
|
||||
import * as sanitization from '../../sanitization/sanitization';
|
||||
|
||||
|
@ -42,11 +42,7 @@ function reflectDependency(dep: any | any[]): R3DependencyMetadata {
|
||||
};
|
||||
|
||||
function setTokenAndResolvedType(token: any): void {
|
||||
if (token === Injector) {
|
||||
meta.resolved = R3ResolvedDependencyType.Injector;
|
||||
} else {
|
||||
meta.resolved = R3ResolvedDependencyType.Token;
|
||||
}
|
||||
meta.resolved = R3ResolvedDependencyType.Token;
|
||||
meta.token = new WrappedNodeExpr(token);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user