feat(transformers): added support for lifecycle events

This commit is contained in:
vsavkin
2015-05-28 17:28:53 -07:00
parent 6f0631c978
commit f19970a481
6 changed files with 95 additions and 5 deletions
+12 -2
View File
@@ -18,7 +18,12 @@ export function directiveMetadataToMap(meta: DirectiveMetadata): Map<string, any
['properties', _cloneIfPresent(meta.properties)],
['readAttributes', _cloneIfPresent(meta.readAttributes)],
['type', meta.type],
['version', 1]
['callOnDestroy', meta.callOnDestroy],
['callOnCheck', meta.callOnCheck],
['callOnInit', meta.callOnInit],
['callOnChange', meta.callOnChange],
['callOnAllChangesDone', meta.callOnAllChangesDone],
['version', 1],
]);
}
@@ -38,7 +43,12 @@ export function directiveMetadataFromMap(map: Map<string, any>): DirectiveMetada
hostAttributes:<Map<string, string>>_cloneIfPresent(MapWrapper.get(map, 'hostAttributes')),
properties:<List<string>>_cloneIfPresent(MapWrapper.get(map, 'properties')),
readAttributes:<List<string>>_cloneIfPresent(MapWrapper.get(map, 'readAttributes')),
type:<number>MapWrapper.get(map, 'type')
type:<number>MapWrapper.get(map, 'type'),
callOnDestroy:<boolean>MapWrapper.get(map, 'callOnDestroy'),
callOnCheck:<boolean>MapWrapper.get(map, 'callOnCheck'),
callOnChange:<boolean>MapWrapper.get(map, 'callOnChange'),
callOnInit:<boolean>MapWrapper.get(map, 'callOnInit'),
callOnAllChangesDone:<boolean>MapWrapper.get(map, 'callOnAllChangesDone')
});
}
@@ -60,7 +60,13 @@ class _DirectiveMetadataVisitor extends Object
hostListeners: {},
hostProperties: {},
hostAttributes: {},
readAttributes: []);
readAttributes: [],
callOnDestroy: false,
callOnChange: false,
callOnCheck: false,
callOnInit: false,
callOnAllChangesDone: false
);
}
@override
@@ -126,6 +132,10 @@ class _DirectiveMetadataVisitor extends Object
break;
case 'hostListeners':
_populateHostListeners(node.expression);
break;
case 'lifecycle':
_populateLifecycle(node.expression);
break;
}
return null;
}
@@ -214,4 +224,20 @@ class _DirectiveMetadataVisitor extends Object
_populateMap(
hostAttributeValue, meta.hostAttributes, 'Directive#hostAttributes');
}
void _populateLifecycle(Expression lifecycleValue) {
_checkMeta();
if (lifecycleValue is! ListLiteral) {
throw new FormatException(
'Angular 2 expects a List but could not understand the value for lifecycle. '
'$lifecycleValue');
}
ListLiteral l = lifecycleValue;
var lifecycleEvents = l.elements.map((s) => s.toSource());
meta.callOnDestroy = lifecycleEvents.contains("onDestroy");
meta.callOnChange = lifecycleEvents.contains("onChange");
meta.callOnCheck = lifecycleEvents.contains("onCheck");
meta.callOnInit = lifecycleEvents.contains("onInit");
meta.callOnAllChangesDone = lifecycleEvents.contains("onAllChangesDone");
}
}