X Tutup
Skip to content

Commit b4e82b8

Browse files
committed
fix(DirectiveMetadata): add support for events, changeDetection
1 parent db3d5d4 commit b4e82b8

File tree

7 files changed

+109
-10
lines changed

7 files changed

+109
-10
lines changed

modules/angular2/src/render/dom/convert.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ export function directiveMetadataToMap(meta: DirectiveMetadata): Map<string, any
2424
['callOnInit', meta.callOnInit],
2525
['callOnChange', meta.callOnChange],
2626
['callOnAllChangesDone', meta.callOnAllChangesDone],
27+
['events', meta.events],
28+
['changeDetection', meta.changeDetection],
2729
['version', 1],
2830
]);
2931
}
@@ -50,7 +52,9 @@ export function directiveMetadataFromMap(map: Map<string, any>): DirectiveMetada
5052
callOnCheck:<boolean>MapWrapper.get(map, 'callOnCheck'),
5153
callOnChange:<boolean>MapWrapper.get(map, 'callOnChange'),
5254
callOnInit:<boolean>MapWrapper.get(map, 'callOnInit'),
53-
callOnAllChangesDone:<boolean>MapWrapper.get(map, 'callOnAllChangesDone')
55+
callOnAllChangesDone:<boolean>MapWrapper.get(map, 'callOnAllChangesDone'),
56+
events:<List<string>>_cloneIfPresent(MapWrapper.get(map, 'events')),
57+
changeDetection:<string>MapWrapper.get(map, 'changeDetection'),
5458
});
5559
}
5660

modules/angular2/src/transform/common/directive_metadata_reader.dart

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ class _DirectiveMetadataVisitor extends Object
6363
bool _callOnCheck;
6464
bool _callOnInit;
6565
bool _callOnAllChangesDone;
66-
String changeDetection;
67-
List<String> events;
66+
String _changeDetection;
67+
List<String> _events;
6868

6969
final ConstantEvaluator _evaluator = new ConstantEvaluator();
7070

@@ -83,8 +83,8 @@ class _DirectiveMetadataVisitor extends Object
8383
_callOnCheck = false;
8484
_callOnInit = false;
8585
_callOnAllChangesDone = false;
86-
changeDetection = null;
87-
events = [];
86+
_changeDetection = null;
87+
_events = [];
8888
}
8989

9090
DirectiveMetadata get meta => DirectiveMetadata.create(
@@ -100,8 +100,8 @@ class _DirectiveMetadataVisitor extends Object
100100
callOnCheck: _callOnCheck,
101101
callOnInit: _callOnInit,
102102
callOnAllChangesDone: _callOnAllChangesDone,
103-
changeDetection: changeDetection,
104-
events: events);
103+
changeDetection: _changeDetection,
104+
events: _events);
105105

106106
@override
107107
Object visitAnnotation(Annotation node) {
@@ -145,7 +145,6 @@ class _DirectiveMetadataVisitor extends Object
145145
'$node' /* source */);
146146
}
147147
var keyString = '${node.name.label}';
148-
// TODO(kegluneq): Populate the other values in [DirectiveMetadata]
149148
switch (keyString) {
150149
case 'selector':
151150
_populateSelector(node.expression);
@@ -165,6 +164,12 @@ class _DirectiveMetadataVisitor extends Object
165164
case 'exportAs':
166165
_populateExportAs(node.expression);
167166
break;
167+
case 'changeDetection':
168+
_populateChangeDetection(node.expression);
169+
break;
170+
case 'events':
171+
_populateEvents(node.expression);
172+
break;
168173
}
169174
return null;
170175
}
@@ -263,4 +268,14 @@ class _DirectiveMetadataVisitor extends Object
263268
_callOnInit = lifecycleEvents.contains("onInit");
264269
_callOnAllChangesDone = lifecycleEvents.contains("onAllChangesDone");
265270
}
271+
272+
void _populateEvents(Expression eventsValue) {
273+
_checkMeta();
274+
_populateList(eventsValue, _events, 'Directive#events');
275+
}
276+
277+
void _populateChangeDetection(Expression value) {
278+
_checkMeta();
279+
_changeDetection = _expressionToString(value, 'Directive#changeDetection');
280+
}
266281
}

modules/angular2/test/render/dom/convert_spec.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ export function main() {
2222
callOnChange: true,
2323
callOnCheck: true,
2424
callOnInit: true,
25-
callOnAllChangesDone: true
25+
callOnAllChangesDone: true,
26+
events: ['onFoo', 'onBar'],
27+
changeDetection: 'CHECK_ONCE'
2628
});
2729
var map = directiveMetadataToMap(someComponent);
2830
expect(MapWrapper.get(map, 'compileChildren')).toEqual(false);
@@ -45,6 +47,8 @@ export function main() {
4547
expect(MapWrapper.get(map, 'callOnInit')).toEqual(true);
4648
expect(MapWrapper.get(map, 'callOnAllChangesDone')).toEqual(true);
4749
expect(MapWrapper.get(map, 'exportAs')).toEqual('aaa');
50+
expect(MapWrapper.get(map, 'events')).toEqual(['onFoo', 'onBar']);
51+
expect(MapWrapper.get(map, 'changeDetection')).toEqual('CHECK_ONCE');
4852
});
4953

5054
it('mapToDirectiveMetadata', () => {
@@ -64,7 +68,9 @@ export function main() {
6468
['callOnCheck', true],
6569
['callOnInit', true],
6670
['callOnChange', true],
67-
['callOnAllChangesDone', true]
71+
['callOnAllChangesDone', true],
72+
['events', ['onFoo', 'onBar']],
73+
['changeDetection', 'CHECK_ONCE']
6874
]);
6975
var meta = directiveMetadataFromMap(map);
7076
expect(meta.compileChildren).toEqual(false);
@@ -83,6 +89,8 @@ export function main() {
8389
expect(meta.callOnInit).toEqual(true);
8490
expect(meta.callOnChange).toEqual(true);
8591
expect(meta.callOnAllChangesDone).toEqual(true);
92+
expect(meta.events).toEqual(['onFoo', 'onBar']);
93+
expect(meta.changeDetection).toEqual('CHECK_ONCE');
8694
});
8795
});
8896
}

modules/angular2/test/transform/directive_metadata_extractor/all_tests.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,18 @@ void allTests() {
109109
expect(metadata.callOnAllChangesDone).toBe(true);
110110
});
111111

112+
it('should parse events.', () async {
113+
var metadata = await readMetadata('directive_metadata_extractor/'
114+
'directive_metadata_files/events.ng_deps.dart');
115+
expect(metadata.events).toEqual(['onFoo', 'onBar']);
116+
});
117+
118+
it('should parse changeDetection.', () async {
119+
var metadata = await readMetadata('directive_metadata_extractor/'
120+
'directive_metadata_files/changeDetection.ng_deps.dart');
121+
expect(metadata.changeDetection).toEqual('CHECK_ONCE');
122+
});
123+
112124
it('should fail when a class is annotated with multiple Directives.',
113125
() async {
114126
var ngDeps = await NgDeps.parse(reader, new AssetId('a',
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
library examples.hello_world.index_common_dart.ng_deps.dart;
2+
3+
import 'hello.dart';
4+
import 'package:angular2/angular2.dart'
5+
show
6+
bootstrap,
7+
Component,
8+
Directive,
9+
View,
10+
NgElement,
11+
onChange,
12+
onDestroy,
13+
onInit,
14+
onCheck,
15+
onAllChangesDone;
16+
17+
var _visited = false;
18+
void initReflector(reflector) {
19+
if (_visited) return;
20+
_visited = true;
21+
reflector
22+
..registerType(HelloCmp, {
23+
'factory': () => new HelloCmp(),
24+
'parameters': const [const []],
25+
'annotations': const [
26+
const Component(changeDetection: 'CHECK_ONCE')
27+
]
28+
});
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
library examples.hello_world.index_common_dart.ng_deps.dart;
2+
3+
import 'hello.dart';
4+
import 'package:angular2/angular2.dart'
5+
show
6+
bootstrap,
7+
Component,
8+
Directive,
9+
View,
10+
NgElement,
11+
onChange,
12+
onDestroy,
13+
onInit,
14+
onCheck,
15+
onAllChangesDone;
16+
17+
var _visited = false;
18+
void initReflector(reflector) {
19+
if (_visited) return;
20+
_visited = true;
21+
reflector
22+
..registerType(HelloCmp, {
23+
'factory': () => new HelloCmp(),
24+
'parameters': const [const []],
25+
'annotations': const [
26+
const Component(events: ['onFoo', 'onBar'])
27+
]
28+
});
29+
}

modules/angular2/test/transform/integration/simple_annotation_files/expected/bar.ng_meta.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
"callOnInit": false,
1717
"callOnChange": false,
1818
"callOnAllChangesDone": false,
19+
"events": [],
20+
"changeDetection": null,
1921
"version": 1
2022
}
2123
}

0 commit comments

Comments
 (0)
X Tutup