feat(TemplateConfig): support array of arrays in TemplateConfig directives

Fixes #592
Closes #600
This commit is contained in:
Marc Laval 2015-02-11 01:03:11 +01:00
parent 8844671c8d
commit 6d8ccaa8e4
3 changed files with 30 additions and 4 deletions

View File

@ -30,6 +30,21 @@ export class DirectiveMetadataReader {
componentDirectivesMetadata(annotation:Component):List<Type> {
var template = annotation.template;
return isPresent(template) && isPresent(template.directives) ? template.directives : [];
var result:List<Type> = ListWrapper.create();
if (isPresent(template) && isPresent(template.directives)) {
this._buildList(result, template.directives);
}
return result;
}
_buildList(out:List<Type>, tree:List<any>) {
for (var i = 0; i < tree.length; i++) {
var item = tree[i];
if (ListWrapper.isList(item)) {
this._buildList(out, item);
} else {
ListWrapper.push(out, item);
}
}
}
}

View File

@ -5,6 +5,7 @@ import {TemplateConfig} from 'angular2/src/core/annotations/template_config';
import {DirectiveMetadata} from 'angular2/src/core/compiler/directive_metadata';
import {ShadowDomStrategy, NativeShadowDomStrategy} from 'angular2/src/core/compiler/shadow_dom_strategy';
import {CONST} from 'angular2/src/facade/lang';
import {If, Foreach} from 'angular2/directives';
@Decorator({
@ -29,7 +30,13 @@ class ComponentWithoutDirectives {}
})
class ComponentWithDirectives {}
@Component({
selector: 'withDirectivesTree',
template: new TemplateConfig({
directives: [[SomeDirective, [Foreach, If]], ComponentWithoutDirectives]
})
})
class ComponentWithDirectivesTree {}
export function main() {
describe("DirectiveMetadataReader", () => {
@ -61,6 +68,11 @@ export function main() {
var cmp = reader.read(ComponentWithDirectives);
expect(cmp.componentDirectives).toEqual([ComponentWithoutDirectives]);
});
it("should return a list of directives specified in the template config as a tree", () => {
var cmp = reader.read(ComponentWithDirectivesTree);
expect(cmp.componentDirectives).toEqual([SomeDirective, Foreach, If, ComponentWithoutDirectives]);
});
});
});
}

View File

@ -262,7 +262,7 @@ class PushBasedComp {
@Component({
template: new TemplateConfig({
directives: [MyDir, ChildComp, SomeTemplate, PushBasedComp]
directives: [MyDir, [[ChildComp], SomeTemplate, PushBasedComp]]
})
})
class MyComp {
@ -305,4 +305,3 @@ class MyService {
this.greeting = 'hello';
}
}