feat(core): add support for ContentChildren and ViewChildren
This commit is contained in:
parent
5809a02624
commit
5dbe292615
|
@ -47,6 +47,7 @@ import {
|
||||||
} from 'angular2/src/core/change_detection/change_detection';
|
} from 'angular2/src/core/change_detection/change_detection';
|
||||||
import {QueryList} from './query_list';
|
import {QueryList} from './query_list';
|
||||||
import {reflector} from 'angular2/src/core/reflection/reflection';
|
import {reflector} from 'angular2/src/core/reflection/reflection';
|
||||||
|
import {SetterFn} from 'angular2/src/core/reflection/types';
|
||||||
import {RenderDirectiveMetadata} from 'angular2/src/core/render/api';
|
import {RenderDirectiveMetadata} from 'angular2/src/core/render/api';
|
||||||
import {EventConfig} from 'angular2/src/core/render/event_config';
|
import {EventConfig} from 'angular2/src/core/render/event_config';
|
||||||
import {PipeBinding} from '../pipes/pipe_binding';
|
import {PipeBinding} from '../pipes/pipe_binding';
|
||||||
|
@ -138,6 +139,17 @@ export class DirectiveBinding extends ResolvedBinding {
|
||||||
|
|
||||||
get callOnDestroy(): boolean { return this.metadata.callOnDestroy; }
|
get callOnDestroy(): boolean { return this.metadata.callOnDestroy; }
|
||||||
|
|
||||||
|
get queries(): QueryMetadataWithSetter[] {
|
||||||
|
if (isBlank(this.metadata.queries)) return [];
|
||||||
|
|
||||||
|
var res = [];
|
||||||
|
StringMapWrapper.forEach(this.metadata.queries, (meta, fieldName) => {
|
||||||
|
var setter = reflector.setter(fieldName);
|
||||||
|
res.push(new QueryMetadataWithSetter(setter, meta));
|
||||||
|
});
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
get eventEmitters(): string[] {
|
get eventEmitters(): string[] {
|
||||||
return isPresent(this.metadata) && isPresent(this.metadata.events) ? this.metadata.events : [];
|
return isPresent(this.metadata) && isPresent(this.metadata.events) ? this.metadata.events : [];
|
||||||
}
|
}
|
||||||
|
@ -151,6 +163,7 @@ export class DirectiveBinding extends ResolvedBinding {
|
||||||
var rf = rb.resolvedFactories[0];
|
var rf = rb.resolvedFactories[0];
|
||||||
var deps = rf.dependencies.map(DirectiveDependency.createFrom);
|
var deps = rf.dependencies.map(DirectiveDependency.createFrom);
|
||||||
var token = binding.token;
|
var token = binding.token;
|
||||||
|
|
||||||
var metadata = RenderDirectiveMetadata.create({
|
var metadata = RenderDirectiveMetadata.create({
|
||||||
id: stringify(binding.token),
|
id: stringify(binding.token),
|
||||||
type: meta instanceof ComponentMetadata ? RenderDirectiveMetadata.COMPONENT_TYPE :
|
type: meta instanceof ComponentMetadata ? RenderDirectiveMetadata.COMPONENT_TYPE :
|
||||||
|
@ -161,6 +174,7 @@ export class DirectiveBinding extends ResolvedBinding {
|
||||||
host: isPresent(meta.host) ? MapWrapper.createFromStringMap(meta.host) : null,
|
host: isPresent(meta.host) ? MapWrapper.createFromStringMap(meta.host) : null,
|
||||||
properties: meta.properties,
|
properties: meta.properties,
|
||||||
readAttributes: DirectiveBinding._readAttributes(<any>deps),
|
readAttributes: DirectiveBinding._readAttributes(<any>deps),
|
||||||
|
queries: meta.queries,
|
||||||
|
|
||||||
callOnDestroy: hasLifecycleHook(LifecycleHooks.OnDestroy, token),
|
callOnDestroy: hasLifecycleHook(LifecycleHooks.OnDestroy, token),
|
||||||
callOnChanges: hasLifecycleHook(LifecycleHooks.OnChanges, token),
|
callOnChanges: hasLifecycleHook(LifecycleHooks.OnChanges, token),
|
||||||
|
@ -203,6 +217,10 @@ export class PreBuiltObjects {
|
||||||
public elementRef: ElementRef, public templateRef: TemplateRef) {}
|
public elementRef: ElementRef, public templateRef: TemplateRef) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class QueryMetadataWithSetter {
|
||||||
|
constructor(public setter: SetterFn, public metadata: QueryMetadata) {}
|
||||||
|
}
|
||||||
|
|
||||||
export class EventEmitterAccessor {
|
export class EventEmitterAccessor {
|
||||||
constructor(public eventName: string, public getter: Function) {}
|
constructor(public eventName: string, public getter: Function) {}
|
||||||
|
|
||||||
|
@ -214,17 +232,6 @@ export class EventEmitterAccessor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class HostActionAccessor {
|
|
||||||
constructor(public methodName: string, public getter: Function) {}
|
|
||||||
|
|
||||||
subscribe(view: viewModule.AppView, boundElementIndex: number, directive: Object): Object {
|
|
||||||
var eventEmitter = this.getter(directive);
|
|
||||||
return ObservableWrapper.subscribe<any[]>(
|
|
||||||
eventEmitter,
|
|
||||||
actionArgs => view.invokeElementMethod(boundElementIndex, this.methodName, actionArgs));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function _createEventEmitterAccessors(bwv: BindingWithVisibility): EventEmitterAccessor[] {
|
function _createEventEmitterAccessors(bwv: BindingWithVisibility): EventEmitterAccessor[] {
|
||||||
var binding = bwv.binding;
|
var binding = bwv.binding;
|
||||||
if (!(binding instanceof DirectiveBinding)) return [];
|
if (!(binding instanceof DirectiveBinding)) return [];
|
||||||
|
@ -554,19 +561,25 @@ export class ElementInjector extends TreeNode<ElementInjector> implements Depend
|
||||||
for (var i = 0; i < deps.length; i++) {
|
for (var i = 0; i < deps.length; i++) {
|
||||||
var dep = deps[i];
|
var dep = deps[i];
|
||||||
if (isPresent(dep.queryDecorator)) {
|
if (isPresent(dep.queryDecorator)) {
|
||||||
this._createQueryRef(dep.queryDecorator);
|
this._createQueryRef(null, null, dep.queryDecorator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_buildQueriesForDirective(dirIndex: number, meta: QueryMetadataWithSetter[]): void {
|
||||||
|
for (var i = 0; i < meta.length; i++) {
|
||||||
|
var m = meta[i];
|
||||||
|
this._createQueryRef(dirIndex, m.setter, m.metadata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private _createQueryRef(query: QueryMetadata): void {
|
private _createQueryRef(dirIndex: number, setter: SetterFn, query: QueryMetadata): void {
|
||||||
var queryList = new QueryList<any>();
|
var queryList = new QueryList<any>();
|
||||||
if (isBlank(this._query0)) {
|
if (isBlank(this._query0)) {
|
||||||
this._query0 = new QueryRef(query, queryList, this);
|
this._query0 = new QueryRef(dirIndex, setter, query, queryList, this);
|
||||||
} else if (isBlank(this._query1)) {
|
} else if (isBlank(this._query1)) {
|
||||||
this._query1 = new QueryRef(query, queryList, this);
|
this._query1 = new QueryRef(dirIndex, setter, query, queryList, this);
|
||||||
} else if (isBlank(this._query2)) {
|
} else if (isBlank(this._query2)) {
|
||||||
this._query2 = new QueryRef(query, queryList, this);
|
this._query2 = new QueryRef(dirIndex, setter, query, queryList, this);
|
||||||
} else {
|
} else {
|
||||||
throw new QueryError();
|
throw new QueryError();
|
||||||
}
|
}
|
||||||
|
@ -758,42 +771,54 @@ class ElementInjectorInlineStrategy implements _ElementInjectorStrategy {
|
||||||
if (p.binding0 instanceof DirectiveBinding) {
|
if (p.binding0 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding0.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding0.resolvedFactories[0].dependencies);
|
||||||
|
|
||||||
|
this._ei._buildQueriesForDirective(0, (<DirectiveBinding>p.binding0).queries);
|
||||||
}
|
}
|
||||||
if (p.binding1 instanceof DirectiveBinding) {
|
if (p.binding1 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding1.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding1.resolvedFactories[0].dependencies);
|
||||||
|
|
||||||
|
this._ei._buildQueriesForDirective(1, (<DirectiveBinding>p.binding1).queries);
|
||||||
}
|
}
|
||||||
if (p.binding2 instanceof DirectiveBinding) {
|
if (p.binding2 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding2.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding2.resolvedFactories[0].dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(2, (<DirectiveBinding>p.binding2).queries);
|
||||||
}
|
}
|
||||||
if (p.binding3 instanceof DirectiveBinding) {
|
if (p.binding3 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding3.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding3.resolvedFactories[0].dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(3, (<DirectiveBinding>p.binding3).queries);
|
||||||
}
|
}
|
||||||
if (p.binding4 instanceof DirectiveBinding) {
|
if (p.binding4 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding4.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding4.resolvedFactories[0].dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(4, (<DirectiveBinding>p.binding4).queries);
|
||||||
}
|
}
|
||||||
if (p.binding5 instanceof DirectiveBinding) {
|
if (p.binding5 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding5.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding5.resolvedFactories[0].dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(5, (<DirectiveBinding>p.binding5).queries);
|
||||||
}
|
}
|
||||||
if (p.binding6 instanceof DirectiveBinding) {
|
if (p.binding6 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding6.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding6.resolvedFactories[0].dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(6, (<DirectiveBinding>p.binding6).queries);
|
||||||
}
|
}
|
||||||
if (p.binding7 instanceof DirectiveBinding) {
|
if (p.binding7 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding7.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding7.resolvedFactories[0].dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(7, (<DirectiveBinding>p.binding7).queries);
|
||||||
}
|
}
|
||||||
if (p.binding8 instanceof DirectiveBinding) {
|
if (p.binding8 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding8.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding8.resolvedFactories[0].dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(8, (<DirectiveBinding>p.binding8).queries);
|
||||||
}
|
}
|
||||||
if (p.binding9 instanceof DirectiveBinding) {
|
if (p.binding9 instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.binding9.resolvedFactories[0].dependencies);
|
<DirectiveDependency[]>p.binding9.resolvedFactories[0].dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(9, (<DirectiveBinding>p.binding9).queries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -896,6 +921,7 @@ class ElementInjectorDynamicStrategy implements _ElementInjectorStrategy {
|
||||||
if (p.bindings[i] instanceof DirectiveBinding) {
|
if (p.bindings[i] instanceof DirectiveBinding) {
|
||||||
this._ei._buildQueriesForDeps(
|
this._ei._buildQueriesForDeps(
|
||||||
<DirectiveDependency[]>p.bindings[i].resolvedFactory.dependencies);
|
<DirectiveDependency[]>p.bindings[i].resolvedFactory.dependencies);
|
||||||
|
this._ei._buildQueriesForDirective(i, (<DirectiveBinding>p.bindings[i]).queries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -927,8 +953,9 @@ export class QueryError extends BaseException {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class QueryRef {
|
export class QueryRef {
|
||||||
constructor(public query: QueryMetadata, public list: QueryList<any>,
|
constructor(public dirIndex: number, public setter: SetterFn, public query: QueryMetadata,
|
||||||
public originator: ElementInjector, public dirty: boolean = true) {}
|
public list: QueryList<any>, public originator: ElementInjector,
|
||||||
|
public dirty: boolean = true) {}
|
||||||
|
|
||||||
get isViewQuery(): boolean { return this.query.isViewQuery; }
|
get isViewQuery(): boolean { return this.query.isViewQuery; }
|
||||||
|
|
||||||
|
@ -936,6 +963,12 @@ export class QueryRef {
|
||||||
if (!this.dirty) return;
|
if (!this.dirty) return;
|
||||||
this._update();
|
this._update();
|
||||||
this.dirty = false;
|
this.dirty = false;
|
||||||
|
|
||||||
|
// TODO delete the check once only field queries are supported
|
||||||
|
if (isPresent(this.dirIndex)) {
|
||||||
|
var dir = this.originator.getDirectiveAtIndex(this.dirIndex);
|
||||||
|
this.setter(dir, this.list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private _update(): void {
|
private _update(): void {
|
||||||
|
|
|
@ -17,6 +17,7 @@ class Directive extends DirectiveMetadata {
|
||||||
const Directive({String selector, List<String> properties,
|
const Directive({String selector, List<String> properties,
|
||||||
List<String> events, Map<String, String> host,
|
List<String> events, Map<String, String> host,
|
||||||
List bindings, String exportAs, String moduleId,
|
List bindings, String exportAs, String moduleId,
|
||||||
|
Map<String, dynamic> queries,
|
||||||
bool compileChildren: true})
|
bool compileChildren: true})
|
||||||
: super(
|
: super(
|
||||||
selector: selector,
|
selector: selector,
|
||||||
|
@ -26,6 +27,7 @@ class Directive extends DirectiveMetadata {
|
||||||
bindings: bindings,
|
bindings: bindings,
|
||||||
exportAs: exportAs,
|
exportAs: exportAs,
|
||||||
moduleId: moduleId,
|
moduleId: moduleId,
|
||||||
|
queries: queries,
|
||||||
compileChildren: compileChildren);
|
compileChildren: compileChildren);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +38,7 @@ class Component extends ComponentMetadata {
|
||||||
const Component({String selector, List<String> properties,
|
const Component({String selector, List<String> properties,
|
||||||
List<String> events, Map<String, String> host, bool dynamicLoadable,
|
List<String> events, Map<String, String> host, bool dynamicLoadable,
|
||||||
List bindings, String exportAs, String moduleId,
|
List bindings, String exportAs, String moduleId,
|
||||||
|
Map<String, dynamic> queries,
|
||||||
bool compileChildren, List viewBindings, ChangeDetectionStrategy changeDetection})
|
bool compileChildren, List viewBindings, ChangeDetectionStrategy changeDetection})
|
||||||
: super(
|
: super(
|
||||||
selector: selector,
|
selector: selector,
|
||||||
|
@ -48,6 +51,7 @@ class Component extends ComponentMetadata {
|
||||||
moduleId: moduleId,
|
moduleId: moduleId,
|
||||||
compileChildren: compileChildren,
|
compileChildren: compileChildren,
|
||||||
viewBindings: viewBindings,
|
viewBindings: viewBindings,
|
||||||
|
queries: queries,
|
||||||
changeDetection: changeDetection);
|
changeDetection: changeDetection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,6 +94,14 @@ class Query extends QueryMetadata {
|
||||||
: super(selector, descendants: descendants);
|
: super(selector, descendants: descendants);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See: [ContentChildrenMetadata] for docs.
|
||||||
|
*/
|
||||||
|
class ContentChildren extends ContentChildrenMetadata {
|
||||||
|
const ContentChildren(dynamic /*Type | string*/ selector, {bool descendants: false})
|
||||||
|
: super(selector, descendants: descendants);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See: [ViewQueryMetadata] for docs.
|
* See: [ViewQueryMetadata] for docs.
|
||||||
*/
|
*/
|
||||||
|
@ -98,6 +110,14 @@ class ViewQuery extends ViewQueryMetadata {
|
||||||
: super(selector, descendants: true);
|
: super(selector, descendants: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See: [ViewChildrenMetadata] for docs.
|
||||||
|
*/
|
||||||
|
class ViewChildren extends ViewChildrenMetadata {
|
||||||
|
const ViewChildren(dynamic /*Type | string*/ selector)
|
||||||
|
: super(selector);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See: [PropertyMetadata] for docs.
|
* See: [PropertyMetadata] for docs.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
export {
|
export {
|
||||||
QueryMetadata,
|
QueryMetadata,
|
||||||
|
ContentChildrenMetadata,
|
||||||
|
ViewChildrenMetadata,
|
||||||
ViewQueryMetadata,
|
ViewQueryMetadata,
|
||||||
AttributeMetadata,
|
AttributeMetadata,
|
||||||
} from './metadata/di';
|
} from './metadata/di';
|
||||||
|
@ -23,6 +25,8 @@ export {ViewMetadata, ViewEncapsulation} from './metadata/view';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
QueryMetadata,
|
QueryMetadata,
|
||||||
|
ContentChildrenMetadata,
|
||||||
|
ViewChildrenMetadata,
|
||||||
ViewQueryMetadata,
|
ViewQueryMetadata,
|
||||||
AttributeMetadata,
|
AttributeMetadata,
|
||||||
} from './metadata/di';
|
} from './metadata/di';
|
||||||
|
@ -138,12 +142,26 @@ export interface ViewDecorator extends TypeDecorator {
|
||||||
*/
|
*/
|
||||||
export interface DirectiveFactory {
|
export interface DirectiveFactory {
|
||||||
(obj: {
|
(obj: {
|
||||||
selector?: string, properties?: string[], events?: string[], host?: StringMap<string, string>,
|
selector?: string,
|
||||||
bindings?: any[], exportAs?: string, moduleId?: string, compileChildren?: boolean;
|
properties?: string[],
|
||||||
|
events?: string[],
|
||||||
|
host?: StringMap<string, string>,
|
||||||
|
bindings?: any[],
|
||||||
|
exportAs?: string,
|
||||||
|
moduleId?: string,
|
||||||
|
compileChildren?: boolean,
|
||||||
|
queries?: StringMap<string, any>
|
||||||
}): DirectiveDecorator;
|
}): DirectiveDecorator;
|
||||||
new (obj: {
|
new (obj: {
|
||||||
selector?: string, properties?: string[], events?: string[], host?: StringMap<string, string>,
|
selector?: string,
|
||||||
bindings?: any[], exportAs?: string, moduleId?: string, compileChildren?: boolean;
|
properties?: string[],
|
||||||
|
events?: string[],
|
||||||
|
host?: StringMap<string, string>,
|
||||||
|
bindings?: any[],
|
||||||
|
exportAs?: string,
|
||||||
|
moduleId?: string,
|
||||||
|
compileChildren?: boolean,
|
||||||
|
queries?: StringMap<string, any>
|
||||||
}): DirectiveMetadata;
|
}): DirectiveMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,6 +219,7 @@ export interface ComponentFactory {
|
||||||
exportAs?: string,
|
exportAs?: string,
|
||||||
moduleId?: string,
|
moduleId?: string,
|
||||||
compileChildren?: boolean,
|
compileChildren?: boolean,
|
||||||
|
queries?: StringMap<string, any>,
|
||||||
viewBindings?: any[],
|
viewBindings?: any[],
|
||||||
changeDetection?: ChangeDetectionStrategy,
|
changeDetection?: ChangeDetectionStrategy,
|
||||||
}): ComponentDecorator;
|
}): ComponentDecorator;
|
||||||
|
@ -214,6 +233,7 @@ export interface ComponentFactory {
|
||||||
exportAs?: string,
|
exportAs?: string,
|
||||||
moduleId?: string,
|
moduleId?: string,
|
||||||
compileChildren?: boolean,
|
compileChildren?: boolean,
|
||||||
|
queries?: StringMap<string, any>,
|
||||||
viewBindings?: any[],
|
viewBindings?: any[],
|
||||||
changeDetection?: ChangeDetectionStrategy,
|
changeDetection?: ChangeDetectionStrategy,
|
||||||
}): ComponentMetadata;
|
}): ComponentMetadata;
|
||||||
|
@ -383,6 +403,16 @@ export interface QueryFactory {
|
||||||
new (selector: Type | string, {descendants}?: {descendants?: boolean}): QueryMetadata;
|
new (selector: Type | string, {descendants}?: {descendants?: boolean}): QueryMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ContentChildrenFactory {
|
||||||
|
(selector: Type | string, {descendants}?: {descendants?: boolean}): any;
|
||||||
|
new (selector: Type | string, {descendants}?: {descendants?: boolean}): ContentChildrenMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ViewChildrenFactory {
|
||||||
|
(selector: Type | string): any;
|
||||||
|
new (selector: Type | string): ViewChildrenMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link PipeMetadata} factory for creating decorators.
|
* {@link PipeMetadata} factory for creating decorators.
|
||||||
*
|
*
|
||||||
|
@ -511,6 +541,15 @@ export var Attribute: AttributeFactory = makeParamDecorator(AttributeMetadata);
|
||||||
*/
|
*/
|
||||||
export var Query: QueryFactory = makeParamDecorator(QueryMetadata);
|
export var Query: QueryFactory = makeParamDecorator(QueryMetadata);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ContentChildrenMetadata} factory function.
|
||||||
|
*/
|
||||||
|
export var ContentChildren: ContentChildrenFactory = makePropDecorator(ContentChildrenMetadata);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ViewChildrenMetadata} factory function.
|
||||||
|
*/
|
||||||
|
export var ViewChildren: ViewChildrenFactory = makePropDecorator(ViewChildrenMetadata);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link ViewQueryMetadata} factory function.
|
* {@link ViewQueryMetadata} factory function.
|
||||||
|
|
|
@ -201,6 +201,34 @@ export class QueryMetadata extends DependencyMetadata {
|
||||||
toString(): string { return `@Query(${stringify(this.selector)})`; }
|
toString(): string { return `@Query(${stringify(this.selector)})`; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: add an example after ContentChildren and ViewChildren are in master
|
||||||
|
/**
|
||||||
|
* Configures a content query.
|
||||||
|
*
|
||||||
|
* Content queries are set before the `afterContentInit` callback is called.
|
||||||
|
*
|
||||||
|
* ### Example
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* @Directive({
|
||||||
|
* selector: 'someDir'
|
||||||
|
* })
|
||||||
|
* class SomeDir {
|
||||||
|
* @ContentChildren(ChildDirective) contentChildren: QueryList<ChildDirective>;
|
||||||
|
*
|
||||||
|
* afterContentInit() {
|
||||||
|
* // contentChildren is set
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
@CONST()
|
||||||
|
export class ContentChildrenMetadata extends QueryMetadata {
|
||||||
|
constructor(_selector: Type | string, {descendants = false}: {descendants?: boolean} = {}) {
|
||||||
|
super(_selector, {descendants: descendants});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Similar to {@link QueryMetadata}, but querying the component view, instead of
|
* Similar to {@link QueryMetadata}, but querying the component view, instead of
|
||||||
* the content children.
|
* the content children.
|
||||||
|
@ -248,3 +276,29 @@ export class ViewQueryMetadata extends QueryMetadata {
|
||||||
get isViewQuery() { return true; }
|
get isViewQuery() { return true; }
|
||||||
toString(): string { return `@ViewQuery(${stringify(this.selector)})`; }
|
toString(): string { return `@ViewQuery(${stringify(this.selector)})`; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configures a view query.
|
||||||
|
*
|
||||||
|
* View queries are set before the `afterViewInit` callback is called.
|
||||||
|
*
|
||||||
|
* ### Example
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* @Component({
|
||||||
|
* selector: 'someDir'
|
||||||
|
* })
|
||||||
|
* @View({templateUrl: 'someTemplate', directives: [ItemDirective]})
|
||||||
|
* class SomeDir {
|
||||||
|
* @ViewChildren(ItemDirective) viewChildren: QueryList<ItemDirective>;
|
||||||
|
*
|
||||||
|
* afterViewInit() {
|
||||||
|
* // viewChildren is set
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
@CONST()
|
||||||
|
export class ViewChildrenMetadata extends ViewQueryMetadata {
|
||||||
|
constructor(_selector: Type | string) { super(_selector, {descendants: true}); }
|
||||||
|
}
|
||||||
|
|
|
@ -719,8 +719,45 @@ export class DirectiveMetadata extends InjectableMetadata {
|
||||||
*/
|
*/
|
||||||
moduleId: string;
|
moduleId: string;
|
||||||
|
|
||||||
|
// TODO: add an example after ContentChildren and ViewChildren are in master
|
||||||
|
/**
|
||||||
|
* Configures the queries that will be injected into the directive.
|
||||||
|
*
|
||||||
|
* Content queries are set before the `afterContentInit` callback is called.
|
||||||
|
* View queries are set before the `afterViewInit` callback is called.
|
||||||
|
*
|
||||||
|
* ### Example
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* @Component({
|
||||||
|
* selector: 'someDir',
|
||||||
|
* queries: {
|
||||||
|
* contentChildren: new ContentChildren(ChildDirective),
|
||||||
|
* viewChildren: new ViewChildren(ChildDirective)
|
||||||
|
* }
|
||||||
|
* })
|
||||||
|
* @View({
|
||||||
|
* template: '<child-directive></child-directive>',
|
||||||
|
* directives: [ChildDirective]
|
||||||
|
* })
|
||||||
|
* class SomeDir {
|
||||||
|
* contentChildren: QueryList<ChildDirective>,
|
||||||
|
* viewChildren: QueryList<ChildDirective>
|
||||||
|
*
|
||||||
|
* afterContentInit() {
|
||||||
|
* // contentChildren is set
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* afterViewInit() {
|
||||||
|
* // viewChildren is set
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
queries: StringMap<string, any>;
|
||||||
|
|
||||||
constructor({
|
constructor({
|
||||||
selector, properties, events, host, bindings, exportAs, moduleId,
|
selector, properties, events, host, bindings, exportAs, moduleId, queries,
|
||||||
compileChildren = true,
|
compileChildren = true,
|
||||||
}: {
|
}: {
|
||||||
selector?: string,
|
selector?: string,
|
||||||
|
@ -730,6 +767,7 @@ export class DirectiveMetadata extends InjectableMetadata {
|
||||||
bindings?: any[],
|
bindings?: any[],
|
||||||
exportAs?: string,
|
exportAs?: string,
|
||||||
moduleId?: string,
|
moduleId?: string,
|
||||||
|
queries?: StringMap<string, any>,
|
||||||
compileChildren?: boolean,
|
compileChildren?: boolean,
|
||||||
} = {}) {
|
} = {}) {
|
||||||
super();
|
super();
|
||||||
|
@ -739,6 +777,7 @@ export class DirectiveMetadata extends InjectableMetadata {
|
||||||
this.host = host;
|
this.host = host;
|
||||||
this.exportAs = exportAs;
|
this.exportAs = exportAs;
|
||||||
this.moduleId = moduleId;
|
this.moduleId = moduleId;
|
||||||
|
this.queries = queries;
|
||||||
this.compileChildren = compileChildren;
|
this.compileChildren = compileChildren;
|
||||||
this.bindings = bindings;
|
this.bindings = bindings;
|
||||||
}
|
}
|
||||||
|
@ -862,7 +901,7 @@ export class ComponentMetadata extends DirectiveMetadata {
|
||||||
viewBindings: any[];
|
viewBindings: any[];
|
||||||
|
|
||||||
constructor({selector, properties, events, host, dynamicLoadable, exportAs, moduleId, bindings,
|
constructor({selector, properties, events, host, dynamicLoadable, exportAs, moduleId, bindings,
|
||||||
viewBindings, changeDetection = ChangeDetectionStrategy.Default,
|
queries, viewBindings, changeDetection = ChangeDetectionStrategy.Default,
|
||||||
compileChildren = true}: {
|
compileChildren = true}: {
|
||||||
selector?: string,
|
selector?: string,
|
||||||
properties?: string[],
|
properties?: string[],
|
||||||
|
@ -874,6 +913,7 @@ export class ComponentMetadata extends DirectiveMetadata {
|
||||||
moduleId?: string,
|
moduleId?: string,
|
||||||
compileChildren?: boolean,
|
compileChildren?: boolean,
|
||||||
viewBindings?: any[],
|
viewBindings?: any[],
|
||||||
|
queries?: StringMap<string, any>,
|
||||||
changeDetection?: ChangeDetectionStrategy,
|
changeDetection?: ChangeDetectionStrategy,
|
||||||
} = {}) {
|
} = {}) {
|
||||||
super({
|
super({
|
||||||
|
@ -884,6 +924,7 @@ export class ComponentMetadata extends DirectiveMetadata {
|
||||||
exportAs: exportAs,
|
exportAs: exportAs,
|
||||||
moduleId: moduleId,
|
moduleId: moduleId,
|
||||||
bindings: bindings,
|
bindings: bindings,
|
||||||
|
queries: queries,
|
||||||
compileChildren: compileChildren
|
compileChildren: compileChildren
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,7 @@ export class RenderDirectiveMetadata {
|
||||||
hostListeners: Map<string, string>;
|
hostListeners: Map<string, string>;
|
||||||
hostProperties: Map<string, string>;
|
hostProperties: Map<string, string>;
|
||||||
hostAttributes: Map<string, string>;
|
hostAttributes: Map<string, string>;
|
||||||
|
queries: StringMap<string, any>;
|
||||||
// group 1: "property" from "[property]"
|
// group 1: "property" from "[property]"
|
||||||
// group 2: "event" from "(event)"
|
// group 2: "event" from "(event)"
|
||||||
private static _hostRegExp = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))$/g;
|
private static _hostRegExp = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))$/g;
|
||||||
|
@ -167,7 +168,7 @@ export class RenderDirectiveMetadata {
|
||||||
constructor({id, selector, compileChildren, events, hostListeners, hostProperties, hostAttributes,
|
constructor({id, selector, compileChildren, events, hostListeners, hostProperties, hostAttributes,
|
||||||
properties, readAttributes, type, callOnDestroy, callOnChanges, callDoCheck,
|
properties, readAttributes, type, callOnDestroy, callOnChanges, callDoCheck,
|
||||||
callOnInit, callAfterContentInit, callAfterContentChecked, callAfterViewInit,
|
callOnInit, callAfterContentInit, callAfterContentChecked, callAfterViewInit,
|
||||||
callAfterViewChecked, changeDetection, exportAs}: {
|
callAfterViewChecked, changeDetection, exportAs, queries}: {
|
||||||
id?: string,
|
id?: string,
|
||||||
selector?: string,
|
selector?: string,
|
||||||
compileChildren?: boolean,
|
compileChildren?: boolean,
|
||||||
|
@ -187,7 +188,8 @@ export class RenderDirectiveMetadata {
|
||||||
callAfterViewInit?: boolean,
|
callAfterViewInit?: boolean,
|
||||||
callAfterViewChecked?: boolean,
|
callAfterViewChecked?: boolean,
|
||||||
changeDetection?: ChangeDetectionStrategy,
|
changeDetection?: ChangeDetectionStrategy,
|
||||||
exportAs?: string
|
exportAs?: string,
|
||||||
|
queries?: StringMap<string, any>
|
||||||
}) {
|
}) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.selector = selector;
|
this.selector = selector;
|
||||||
|
@ -209,12 +211,13 @@ export class RenderDirectiveMetadata {
|
||||||
this.callAfterViewChecked = callAfterViewChecked;
|
this.callAfterViewChecked = callAfterViewChecked;
|
||||||
this.changeDetection = changeDetection;
|
this.changeDetection = changeDetection;
|
||||||
this.exportAs = exportAs;
|
this.exportAs = exportAs;
|
||||||
|
this.queries = queries;
|
||||||
}
|
}
|
||||||
|
|
||||||
static create({id, selector, compileChildren, events, host, properties, readAttributes, type,
|
static create({id, selector, compileChildren, events, host, properties, readAttributes, type,
|
||||||
callOnDestroy, callOnChanges, callDoCheck, callOnInit, callAfterContentInit,
|
callOnDestroy, callOnChanges, callDoCheck, callOnInit, callAfterContentInit,
|
||||||
callAfterContentChecked, callAfterViewInit, callAfterViewChecked, changeDetection,
|
callAfterContentChecked, callAfterViewInit, callAfterViewChecked, changeDetection,
|
||||||
exportAs}: {
|
exportAs, queries}: {
|
||||||
id?: string,
|
id?: string,
|
||||||
selector?: string,
|
selector?: string,
|
||||||
compileChildren?: boolean,
|
compileChildren?: boolean,
|
||||||
|
@ -232,7 +235,8 @@ export class RenderDirectiveMetadata {
|
||||||
callAfterViewInit?: boolean,
|
callAfterViewInit?: boolean,
|
||||||
callAfterViewChecked?: boolean,
|
callAfterViewChecked?: boolean,
|
||||||
changeDetection?: ChangeDetectionStrategy,
|
changeDetection?: ChangeDetectionStrategy,
|
||||||
exportAs?: string
|
exportAs?: string,
|
||||||
|
queries?: StringMap<string, any>
|
||||||
}): RenderDirectiveMetadata {
|
}): RenderDirectiveMetadata {
|
||||||
let hostListeners = new Map();
|
let hostListeners = new Map();
|
||||||
let hostProperties = new Map();
|
let hostProperties = new Map();
|
||||||
|
@ -271,7 +275,8 @@ export class RenderDirectiveMetadata {
|
||||||
callAfterViewInit: callAfterViewInit,
|
callAfterViewInit: callAfterViewInit,
|
||||||
callAfterViewChecked: callAfterViewChecked,
|
callAfterViewChecked: callAfterViewChecked,
|
||||||
changeDetection: changeDetection,
|
changeDetection: changeDetection,
|
||||||
exportAs: exportAs
|
exportAs: exportAs,
|
||||||
|
queries: queries
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ export class MockDirectiveResolver extends DirectiveResolver {
|
||||||
exportAs: dm.exportAs,
|
exportAs: dm.exportAs,
|
||||||
moduleId: dm.moduleId,
|
moduleId: dm.moduleId,
|
||||||
compileChildren: dm.compileChildren,
|
compileChildren: dm.compileChildren,
|
||||||
|
queries: dm.queries,
|
||||||
changeDetection: dm.changeDetection,
|
changeDetection: dm.changeDetection,
|
||||||
viewBindings: viewBindings
|
viewBindings: viewBindings
|
||||||
});
|
});
|
||||||
|
@ -47,7 +48,8 @@ export class MockDirectiveResolver extends DirectiveResolver {
|
||||||
bindings: bindings,
|
bindings: bindings,
|
||||||
exportAs: dm.exportAs,
|
exportAs: dm.exportAs,
|
||||||
moduleId: dm.moduleId,
|
moduleId: dm.moduleId,
|
||||||
compileChildren: dm.compileChildren
|
compileChildren: dm.compileChildren,
|
||||||
|
queries: dm.queries
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,11 @@ import {
|
||||||
Query,
|
Query,
|
||||||
QueryList,
|
QueryList,
|
||||||
View,
|
View,
|
||||||
ViewQuery
|
ViewQuery,
|
||||||
|
ContentChildren,
|
||||||
|
ViewChildren,
|
||||||
|
AfterContentInit,
|
||||||
|
AfterViewInit
|
||||||
} from 'angular2/core';
|
} from 'angular2/core';
|
||||||
|
|
||||||
import {asNativeElements} from 'angular2/src/core/debug';
|
import {asNativeElements} from 'angular2/src/core/debug';
|
||||||
|
@ -36,7 +40,7 @@ export function main() {
|
||||||
describe('Query API', () => {
|
describe('Query API', () => {
|
||||||
|
|
||||||
describe("querying by directive type", () => {
|
describe("querying by directive type", () => {
|
||||||
it('should contain all direct child directives in the light dom',
|
it('should contain all direct child directives in the light dom (constructor)',
|
||||||
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
||||||
var template = '<div text="1"></div>' +
|
var template = '<div text="1"></div>' +
|
||||||
'<needs-query text="2"><div text="3">' +
|
'<needs-query text="2"><div text="3">' +
|
||||||
|
@ -56,6 +60,27 @@ export function main() {
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should contain all direct child directives in the content dom',
|
||||||
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
||||||
|
var template =
|
||||||
|
'<needs-content-children #q><div text="foo"></div></needs-content-children>';
|
||||||
|
|
||||||
|
tcb.overrideTemplate(MyComp, template)
|
||||||
|
.createAsync(MyComp)
|
||||||
|
.then((view) => {
|
||||||
|
view.detectChanges();
|
||||||
|
|
||||||
|
var q = view.debugElement.componentViewChildren[0].getLocal('q');
|
||||||
|
|
||||||
|
view.detectChanges();
|
||||||
|
|
||||||
|
expect(q.textDirChildren.length).toEqual(1);
|
||||||
|
expect(q.numberOfChildrenAfterContentInit).toEqual(1);
|
||||||
|
|
||||||
|
async.done();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
it('should contain all directives in the light dom when descendants flag is used',
|
it('should contain all directives in the light dom when descendants flag is used',
|
||||||
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
||||||
var template = '<div text="1"></div>' +
|
var template = '<div text="1"></div>' +
|
||||||
|
@ -385,6 +410,27 @@ export function main() {
|
||||||
async.done();
|
async.done();
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should contain all child directives in the view dom',
|
||||||
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
||||||
|
var template = '<needs-view-children #q></needs-view-children>';
|
||||||
|
|
||||||
|
tcb.overrideTemplate(MyComp, template)
|
||||||
|
.createAsync(MyComp)
|
||||||
|
.then((view) => {
|
||||||
|
view.detectChanges();
|
||||||
|
|
||||||
|
var q = view.debugElement.componentViewChildren[0].getLocal('q');
|
||||||
|
|
||||||
|
view.detectChanges();
|
||||||
|
|
||||||
|
expect(q.textDirChildren.length).toEqual(1);
|
||||||
|
expect(q.numberOfChildrenAfterViewInit).toEqual(1);
|
||||||
|
|
||||||
|
async.done();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("querying in the view", () => {
|
describe("querying in the view", () => {
|
||||||
|
@ -552,6 +598,32 @@ class TextDirective {
|
||||||
constructor() {}
|
constructor() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'needs-content-children',
|
||||||
|
queries: {'textDirChildren': new ContentChildren(TextDirective)}
|
||||||
|
})
|
||||||
|
@View({template: ''})
|
||||||
|
class NeedsContentChildren implements AfterContentInit {
|
||||||
|
textDirChildren: QueryList<TextDirective>;
|
||||||
|
numberOfChildrenAfterContentInit: number;
|
||||||
|
|
||||||
|
afterContentInit() { this.numberOfChildrenAfterContentInit = this.textDirChildren.length; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'needs-view-children',
|
||||||
|
queries: {
|
||||||
|
'textDirChildren': new ViewChildren(TextDirective),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
@View({template: '<div text></div>', directives: [TextDirective]})
|
||||||
|
class NeedsViewChildren implements AfterViewInit {
|
||||||
|
textDirChildren: QueryList<TextDirective>;
|
||||||
|
numberOfChildrenAfterViewInit: number;
|
||||||
|
|
||||||
|
afterViewInit() { this.numberOfChildrenAfterViewInit = this.textDirChildren.length; }
|
||||||
|
}
|
||||||
|
|
||||||
@Directive({selector: '[dir]'})
|
@Directive({selector: '[dir]'})
|
||||||
@Injectable()
|
@Injectable()
|
||||||
class InertDirective {
|
class InertDirective {
|
||||||
|
@ -718,6 +790,8 @@ class NeedsTpl {
|
||||||
NeedsViewQueryOrder,
|
NeedsViewQueryOrder,
|
||||||
NeedsViewQueryByLabel,
|
NeedsViewQueryByLabel,
|
||||||
NeedsViewQueryOrderWithParent,
|
NeedsViewQueryOrderWithParent,
|
||||||
|
NeedsContentChildren,
|
||||||
|
NeedsViewChildren,
|
||||||
NeedsTpl,
|
NeedsTpl,
|
||||||
TextDirective,
|
TextDirective,
|
||||||
InertDirective,
|
InertDirective,
|
||||||
|
|
|
@ -180,6 +180,30 @@ const NG_API = [
|
||||||
'ComponentUrlMapper',
|
'ComponentUrlMapper',
|
||||||
'ComponentUrlMapper.getUrl',
|
'ComponentUrlMapper.getUrl',
|
||||||
|
|
||||||
|
'ContentChildren',
|
||||||
|
'ContentChildren.constructor',
|
||||||
|
'ContentChildren.constructor.constructor',
|
||||||
|
'ContentChildren.constructor.isVarBindingQuery',
|
||||||
|
'ContentChildren.constructor.isViewQuery',
|
||||||
|
'ContentChildren.constructor.selector',
|
||||||
|
'ContentChildren.constructor.toString',
|
||||||
|
'ContentChildren.constructor.token',
|
||||||
|
'ContentChildren.constructor.varBindings',
|
||||||
|
'ContentChildren.isVarBindingQuery',
|
||||||
|
'ContentChildren.isViewQuery',
|
||||||
|
'ContentChildren.selector',
|
||||||
|
'ContentChildren.toString',
|
||||||
|
'ContentChildren.token',
|
||||||
|
'ContentChildren.varBindings',
|
||||||
|
'ContentChildrenMetadata',
|
||||||
|
'ContentChildrenMetadata.constructor',
|
||||||
|
'ContentChildrenMetadata.isVarBindingQuery',
|
||||||
|
'ContentChildrenMetadata.isViewQuery',
|
||||||
|
'ContentChildrenMetadata.selector',
|
||||||
|
'ContentChildrenMetadata.toString',
|
||||||
|
'ContentChildrenMetadata.token',
|
||||||
|
'ContentChildrenMetadata.varBindings',
|
||||||
|
|
||||||
'Control',
|
'Control',
|
||||||
'Control.constructor',
|
'Control.constructor',
|
||||||
'Control.dirty',
|
'Control.dirty',
|
||||||
|
@ -836,6 +860,30 @@ const NG_API = [
|
||||||
|
|
||||||
'View',
|
'View',
|
||||||
|
|
||||||
|
'ViewChildren',
|
||||||
|
'ViewChildren.constructor',
|
||||||
|
'ViewChildren.constructor.constructor',
|
||||||
|
'ViewChildren.constructor.isVarBindingQuery',
|
||||||
|
'ViewChildren.constructor.isViewQuery',
|
||||||
|
'ViewChildren.constructor.selector',
|
||||||
|
'ViewChildren.constructor.toString',
|
||||||
|
'ViewChildren.constructor.token',
|
||||||
|
'ViewChildren.constructor.varBindings',
|
||||||
|
'ViewChildren.isVarBindingQuery',
|
||||||
|
'ViewChildren.isViewQuery',
|
||||||
|
'ViewChildren.selector',
|
||||||
|
'ViewChildren.toString',
|
||||||
|
'ViewChildren.token',
|
||||||
|
'ViewChildren.varBindings',
|
||||||
|
'ViewChildrenMetadata',
|
||||||
|
'ViewChildrenMetadata.constructor',
|
||||||
|
'ViewChildrenMetadata.isVarBindingQuery',
|
||||||
|
'ViewChildrenMetadata.isViewQuery',
|
||||||
|
'ViewChildrenMetadata.selector',
|
||||||
|
'ViewChildrenMetadata.toString',
|
||||||
|
'ViewChildrenMetadata.token',
|
||||||
|
'ViewChildrenMetadata.varBindings',
|
||||||
|
|
||||||
'ViewContainerRef',
|
'ViewContainerRef',
|
||||||
'ViewContainerRef.clear',
|
'ViewContainerRef.clear',
|
||||||
'ViewContainerRef.createEmbeddedView',
|
'ViewContainerRef.createEmbeddedView',
|
||||||
|
|
Loading…
Reference in New Issue