parent
9c9769047d
commit
0ed6fc4f6b
|
@ -41,12 +41,10 @@ export class ChangeDetectionCompiler {
|
||||||
}
|
}
|
||||||
|
|
||||||
private _createChangeDetectorFactory(definition: ChangeDetectorDefinition): Function {
|
private _createChangeDetectorFactory(definition: ChangeDetectorDefinition): Function {
|
||||||
if (IS_DART) {
|
if (IS_DART || !this._genConfig.useJit) {
|
||||||
var proto = new DynamicProtoChangeDetector(definition);
|
var proto = new DynamicProtoChangeDetector(definition);
|
||||||
return (dispatcher) => proto.instantiate(dispatcher);
|
return (dispatcher) => proto.instantiate(dispatcher);
|
||||||
} else {
|
} else {
|
||||||
// TODO(tbosch): provide a flag in _genConfig whether to allow eval or fall back to dynamic
|
|
||||||
// change detection as well!
|
|
||||||
return new ChangeDetectorJITGenerator(definition, UTIL, ABSTRACT_CHANGE_DETECTOR).generate();
|
return new ChangeDetectorJITGenerator(definition, UTIL, ABSTRACT_CHANGE_DETECTOR).generate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,10 @@ export class TemplateCompiler {
|
||||||
|
|
||||||
normalizeDirectiveMetadata(directive:
|
normalizeDirectiveMetadata(directive:
|
||||||
CompileDirectiveMetadata): Promise<CompileDirectiveMetadata> {
|
CompileDirectiveMetadata): Promise<CompileDirectiveMetadata> {
|
||||||
|
if (!directive.isComponent) {
|
||||||
|
// For non components there is nothing to be normalized yet.
|
||||||
|
return PromiseWrapper.resolve(directive);
|
||||||
|
}
|
||||||
var normalizedTemplatePromise;
|
var normalizedTemplatePromise;
|
||||||
if (directive.isComponent) {
|
if (directive.isComponent) {
|
||||||
normalizedTemplatePromise =
|
normalizedTemplatePromise =
|
||||||
|
|
|
@ -15,6 +15,10 @@ import {
|
||||||
*/
|
*/
|
||||||
@CONST()
|
@CONST()
|
||||||
export class CompiledTemplate {
|
export class CompiledTemplate {
|
||||||
|
static getChangeDetectorFromData(data: any[]): Function { return data[0]; }
|
||||||
|
static getCommandsFromData(data: any[]): TemplateCmd[] { return data[1]; }
|
||||||
|
static getSylesFromData(data: any[]): string[] { return data[2]; }
|
||||||
|
|
||||||
// Note: paramGetter is a function so that we can have cycles between templates!
|
// Note: paramGetter is a function so that we can have cycles between templates!
|
||||||
// paramGetter returns a tuple with:
|
// paramGetter returns a tuple with:
|
||||||
// - ChangeDetector factory function
|
// - ChangeDetector factory function
|
||||||
|
@ -91,13 +95,11 @@ export function endElement(): TemplateCmd {
|
||||||
export class BeginComponentCmd implements TemplateCmd, IBeginElementCmd, RenderBeginComponentCmd {
|
export class BeginComponentCmd implements TemplateCmd, IBeginElementCmd, RenderBeginComponentCmd {
|
||||||
isBound: boolean = true;
|
isBound: boolean = true;
|
||||||
templateId: number;
|
templateId: number;
|
||||||
component: Type;
|
|
||||||
constructor(public name: string, public attrNameAndValues: string[],
|
constructor(public name: string, public attrNameAndValues: string[],
|
||||||
public eventTargetAndNames: string[],
|
public eventTargetAndNames: string[],
|
||||||
public variableNameAndValues: Array<string | number>, public directives: Type[],
|
public variableNameAndValues: Array<string | number>, public directives: Type[],
|
||||||
public nativeShadow: boolean, public ngContentIndex: number,
|
public nativeShadow: boolean, public ngContentIndex: number,
|
||||||
public template: CompiledTemplate) {
|
public template: CompiledTemplate) {
|
||||||
this.component = directives[0];
|
|
||||||
this.templateId = template.id;
|
this.templateId = template.id;
|
||||||
}
|
}
|
||||||
visit(visitor: RenderCommandVisitor, context: any): any {
|
visit(visitor: RenderCommandVisitor, context: any): any {
|
||||||
|
|
|
@ -212,6 +212,15 @@ export function main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('normalizeDirectiveMetadata', () => {
|
describe('normalizeDirectiveMetadata', () => {
|
||||||
|
it('should return the given DirectiveMetadata for non components',
|
||||||
|
inject([AsyncTestCompleter], (async) => {
|
||||||
|
var meta = runtimeMetadataResolver.getMetadata(NonComponent);
|
||||||
|
compiler.normalizeDirectiveMetadata(meta).then(normMeta => {
|
||||||
|
expect(normMeta).toBe(meta);
|
||||||
|
async.done();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
it('should normalize the template',
|
it('should normalize the template',
|
||||||
inject([AsyncTestCompleter, XHR], (async, xhr: MockXHR) => {
|
inject([AsyncTestCompleter, XHR], (async, xhr: MockXHR) => {
|
||||||
xhr.expect('angular2/test/compiler/compUrl.html', 'loadedTemplate');
|
xhr.expect('angular2/test/compiler/compUrl.html', 'loadedTemplate');
|
||||||
|
@ -323,10 +332,14 @@ export function humanizeTemplate(template: CompiledTemplate,
|
||||||
}
|
}
|
||||||
var commands = [];
|
var commands = [];
|
||||||
var templateData = template.dataGetter();
|
var templateData = template.dataGetter();
|
||||||
result =
|
result = {
|
||||||
{'styles': templateData[2], 'commands': commands, 'cd': testChangeDetector(templateData[0])};
|
'styles': CompiledTemplate.getSylesFromData(templateData),
|
||||||
|
'commands': commands,
|
||||||
|
'cd': testChangeDetector(CompiledTemplate.getChangeDetectorFromData(templateData))
|
||||||
|
};
|
||||||
humanizedTemplates.set(template.id, result);
|
humanizedTemplates.set(template.id, result);
|
||||||
visitAllCommands(new CommandHumanizer(commands, humanizedTemplates), templateData[1]);
|
visitAllCommands(new CommandHumanizer(commands, humanizedTemplates),
|
||||||
|
CompiledTemplate.getCommandsFromData(templateData));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue