feat(core): add sugar to use ContentChildren and ViewChildren as prop decorators

Closes #4237
This commit is contained in:
vsavkin
2015-09-17 18:45:49 -07:00
committed by Victor Savkin
parent 5dbe292615
commit 2e9de0b169
2 changed files with 52 additions and 7 deletions

View File

@ -6,7 +6,11 @@ import {
Property,
Event,
HostBinding,
HostListener
HostListener,
ContentChildren,
ContentChildrenMetadata,
ViewChildren,
ViewChildrenMetadata
} from 'angular2/src/core/metadata';
@Directive({selector: 'someDirective'})
@ -64,6 +68,17 @@ class SomeDirectiveWithHostListeners {
}
}
@Directive({selector: 'someDirective', queries: {"cs": new ContentChildren("c")}})
class SomeDirectiveWithContentChildren {
@ContentChildren("a") as: any;
c;
}
@Directive({selector: 'someDirective', queries: {"cs": new ViewChildren("c")}})
class SomeDirectiveWithViewChildren {
@ViewChildren("a") as: any;
c;
}
class SomeDirectiveWithoutMetadata {}
@ -77,7 +92,7 @@ export function main() {
var directiveMetadata = resolver.resolve(SomeDirective);
expect(directiveMetadata)
.toEqual(new DirectiveMetadata(
{selector: 'someDirective', properties: [], events: [], host: {}}));
{selector: 'someDirective', properties: [], events: [], host: {}, queries: {}}));
});
it('should throw if not matching metadata is found', () => {
@ -89,7 +104,7 @@ export function main() {
var directiveMetadata = resolver.resolve(SomeChildDirective);
expect(directiveMetadata)
.toEqual(new DirectiveMetadata(
{selector: 'someChildDirective', properties: [], events: [], host: {}}));
{selector: 'someChildDirective', properties: [], events: [], host: {}, queries: {}}));
});
describe('properties', () => {
@ -128,5 +143,19 @@ export function main() {
.toEqual({'(c)': 'onC()', '(a)': 'onA()', '(b)': 'onB($event.value)'});
});
});
describe('queries', () => {
it('should append ContentChildren', () => {
var directiveMetadata = resolver.resolve(SomeDirectiveWithContentChildren);
expect(directiveMetadata.queries)
.toEqual({"cs": new ContentChildren("c"), "as": new ContentChildren("a")});
});
it('should append ViewChildren', () => {
var directiveMetadata = resolver.resolve(SomeDirectiveWithViewChildren);
expect(directiveMetadata.queries)
.toEqual({"cs": new ViewChildren("c"), "as": new ViewChildren("a")});
});
});
});
}