X Tutup
Skip to content

Commit c9901c5

Browse files
committed
feat(core): support properties and events in addition to inputs and outputs to make transition easier
Closes #4482
1 parent 5ea6dc8 commit c9901c5

File tree

8 files changed

+93
-8
lines changed

8 files changed

+93
-8
lines changed

modules/angular2/src/core/linker/directive_resolver.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {resolveForwardRef, Injectable} from 'angular2/src/core/di';
2-
import {Type, isPresent, stringify} from 'angular2/src/core/facade/lang';
2+
import {Type, isPresent, isBlank, stringify} from 'angular2/src/core/facade/lang';
33
import {BaseException} from 'angular2/src/core/facade/exceptions';
44
import {ListWrapper, StringMap, StringMapWrapper} from 'angular2/src/core/facade/collection';
55
import {
@@ -110,6 +110,10 @@ export class DirectiveResolver {
110110
var mergedQueries =
111111
isPresent(dm.queries) ? StringMapWrapper.merge(dm.queries, queries) : queries;
112112

113+
// TODO: remove after migrating from properties to inputs
114+
if (mergedInputs.length == 0 && isPresent(dm.properties)) mergedInputs = dm.properties;
115+
if (mergedOutputs.length == 0 && isPresent(dm.events)) mergedOutputs = dm.events;
116+
113117
if (dm instanceof ComponentMetadata) {
114118
return new ComponentMetadata({
115119
selector: dm.selector,

modules/angular2/src/core/metadata.dart

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@ export './metadata/view.dart';
1515
*/
1616
class Directive extends DirectiveMetadata {
1717
const Directive({String selector, List<String> inputs,
18-
List<String> outputs, Map<String, String> host,
18+
List<String> outputs,
19+
@deprecated List<String> properties,
20+
@deprecated List<String> events,
21+
Map<String, String> host,
1922
List bindings, String exportAs, String moduleId,
2023
Map<String, dynamic> queries})
2124
: super(
2225
selector: selector,
2326
inputs: inputs,
2427
outputs: outputs,
28+
properties: properties,
29+
events: events,
2530
host: host,
2631
bindings: bindings,
2732
exportAs: exportAs,
@@ -34,14 +39,19 @@ class Directive extends DirectiveMetadata {
3439
*/
3540
class Component extends ComponentMetadata {
3641
const Component({String selector, List<String> inputs,
37-
List<String> outputs, Map<String, String> host,
42+
List<String> outputs,
43+
@deprecated List<String> properties,
44+
@deprecated List<String> events,
45+
Map<String, String> host,
3846
List bindings, String exportAs, String moduleId,
3947
Map<String, dynamic> queries,
4048
List viewBindings, ChangeDetectionStrategy changeDetection})
4149
: super(
4250
selector: selector,
4351
inputs: inputs,
4452
outputs: outputs,
53+
properties: properties,
54+
events: events,
4555
host: host,
4656
bindings: bindings,
4757
exportAs: exportAs,

modules/angular2/src/core/metadata.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ export interface DirectiveFactory {
149149
selector?: string,
150150
inputs?: string[],
151151
outputs?: string[],
152+
properties?: string[],
153+
events?: string[],
152154
host?: StringMap<string, string>,
153155
bindings?: any[],
154156
exportAs?: string,
@@ -159,6 +161,8 @@ export interface DirectiveFactory {
159161
selector?: string,
160162
inputs?: string[],
161163
outputs?: string[],
164+
properties?: string[],
165+
events?: string[],
162166
host?: StringMap<string, string>,
163167
bindings?: any[],
164168
exportAs?: string,
@@ -215,6 +219,8 @@ export interface ComponentFactory {
215219
selector?: string,
216220
inputs?: string[],
217221
outputs?: string[],
222+
properties?: string[],
223+
events?: string[],
218224
host?: StringMap<string, string>,
219225
bindings?: any[],
220226
exportAs?: string,
@@ -227,6 +233,8 @@ export interface ComponentFactory {
227233
selector?: string,
228234
inputs?: string[],
229235
outputs?: string[],
236+
properties?: string[],
237+
events?: string[],
230238
host?: StringMap<string, string>,
231239
bindings?: any[],
232240
exportAs?: string,

modules/angular2/src/core/metadata/directives.ts

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,12 @@ export class DirectiveMetadata extends InjectableMetadata {
467467
*/
468468
inputs: string[];
469469

470+
/**
471+
* @deprecated
472+
* Same as `inputs`. This is to enable easier migration.
473+
*/
474+
properties: string[];
475+
470476
/**
471477
* Enumerates the set of event-bound output properties.
472478
*
@@ -514,6 +520,12 @@ export class DirectiveMetadata extends InjectableMetadata {
514520
*/
515521
outputs: string[];
516522

523+
/**
524+
* @deprecated
525+
* Same as `outputs`. This is to enable easier migration.
526+
*/
527+
events: string[];
528+
517529
/**
518530
* Specify the events, actions, properties and attributes related to the host element.
519531
*
@@ -738,10 +750,13 @@ export class DirectiveMetadata extends InjectableMetadata {
738750
*/
739751
queries: StringMap<string, any>;
740752

741-
constructor({selector, inputs, outputs, host, bindings, exportAs, moduleId, queries}: {
753+
constructor({selector, inputs, outputs, properties, events, host, bindings, exportAs, moduleId,
754+
queries}: {
742755
selector?: string,
743756
inputs?: string[],
744757
outputs?: string[],
758+
properties?: string[],
759+
events?: string[],
745760
host?: StringMap<string, string>,
746761
bindings?: any[],
747762
exportAs?: string,
@@ -753,6 +768,11 @@ export class DirectiveMetadata extends InjectableMetadata {
753768
this.inputs = inputs;
754769
this.outputs = outputs;
755770
this.host = host;
771+
772+
// TODO: remove this once properties and events are removed.
773+
this.properties = properties;
774+
this.events = events;
775+
756776
this.exportAs = exportAs;
757777
this.moduleId = moduleId;
758778
this.queries = queries;
@@ -856,11 +876,13 @@ export class ComponentMetadata extends DirectiveMetadata {
856876
*/
857877
viewBindings: any[];
858878

859-
constructor({selector, inputs, outputs, host, exportAs, moduleId, bindings, viewBindings,
860-
changeDetection = ChangeDetectionStrategy.Default, queries}: {
879+
constructor({selector, inputs, outputs, properties, events, host, exportAs, moduleId, bindings,
880+
viewBindings, changeDetection = ChangeDetectionStrategy.Default, queries}: {
861881
selector?: string,
862882
inputs?: string[],
863883
outputs?: string[],
884+
properties?: string[],
885+
events?: string[],
864886
host?: StringMap<string, string>,
865887
bindings?: any[],
866888
exportAs?: string,
@@ -873,6 +895,8 @@ export class ComponentMetadata extends DirectiveMetadata {
873895
selector: selector,
874896
inputs: inputs,
875897
outputs: outputs,
898+
properties: properties,
899+
events: events,
876900
host: host,
877901
exportAs: exportAs,
878902
moduleId: moduleId,

modules/angular2/test/core/linker/directive_resolver_spec.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class SomeChildDirective extends SomeDirective {
2626
}
2727

2828
@Directive({selector: 'someDirective', inputs: ['c']})
29-
class SomeDirectiveWithProperties {
29+
class SomeDirectiveWithInputs {
3030
@Input() a;
3131
@Input("renamed") b;
3232
c;
@@ -39,6 +39,15 @@ class SomeDirectiveWithOutputs {
3939
c;
4040
}
4141

42+
@Directive({selector: 'someDirective', properties: ['a']})
43+
class SomeDirectiveWithProperties {
44+
}
45+
46+
@Directive({selector: 'someDirective', events: ['a']})
47+
class SomeDirectiveWithEvents {
48+
}
49+
50+
4251

4352
@Directive({selector: 'someDirective'})
4453
class SomeDirectiveWithSetterProps {
@@ -125,14 +134,20 @@ export function main() {
125134

126135
describe('inputs', () => {
127136
it('should append directive inputs', () => {
128-
var directiveMetadata = resolver.resolve(SomeDirectiveWithProperties);
137+
var directiveMetadata = resolver.resolve(SomeDirectiveWithInputs);
129138
expect(directiveMetadata.inputs).toEqual(['c', 'a', 'b: renamed']);
130139
});
131140

132141
it('should work with getters and setters', () => {
133142
var directiveMetadata = resolver.resolve(SomeDirectiveWithSetterProps);
134143
expect(directiveMetadata.inputs).toEqual(['a: renamed']);
135144
});
145+
146+
it('should use properties as inputs', () => {
147+
var directiveMetadata = resolver.resolve(SomeDirectiveWithProperties);
148+
expect(directiveMetadata.inputs).toEqual(['a']);
149+
});
150+
136151
});
137152

138153
describe('outputs', () => {
@@ -145,6 +160,11 @@ export function main() {
145160
var directiveMetadata = resolver.resolve(SomeDirectiveWithGetterOutputs);
146161
expect(directiveMetadata.outputs).toEqual(['a: renamed']);
147162
});
163+
164+
it('should use events as outputs', () => {
165+
var directiveMetadata = resolver.resolve(SomeDirectiveWithEvents);
166+
expect(directiveMetadata.outputs).toEqual(['a']);
167+
});
148168
});
149169

150170
describe('host', () => {

modules/angular2/test/public_api_spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,21 +157,25 @@ var NG_API = [
157157
'Component.bindings',
158158
'Component.changeDetection',
159159
'Component.outputs',
160+
'Component.events',
160161
'Component.exportAs',
161162
'Component.host',
162163
'Component.moduleId',
163164
'Component.inputs',
165+
'Component.properties',
164166
'Component.queries',
165167
'Component.selector',
166168
'Component.viewBindings',
167169
'ComponentMetadata',
168170
'ComponentMetadata.bindings',
169171
'ComponentMetadata.changeDetection',
170172
'ComponentMetadata.outputs',
173+
'ComponentMetadata.events',
171174
'ComponentMetadata.exportAs',
172175
'ComponentMetadata.host',
173176
'ComponentMetadata.moduleId',
174177
'ComponentMetadata.inputs',
178+
'ComponentMetadata.properties',
175179
'ComponentMetadata.queries',
176180
'ComponentMetadata.selector',
177181
'ComponentMetadata.viewBindings',
@@ -370,19 +374,23 @@ var NG_API = [
370374
'Directive',
371375
'Directive.bindings',
372376
'Directive.outputs',
377+
'Directive.events',
373378
'Directive.exportAs',
374379
'Directive.host',
375380
'Directive.moduleId',
376381
'Directive.inputs',
382+
'Directive.properties',
377383
'Directive.queries',
378384
'Directive.selector',
379385
'DirectiveMetadata',
380386
'DirectiveMetadata.bindings',
381387
'DirectiveMetadata.outputs',
388+
'DirectiveMetadata.events',
382389
'DirectiveMetadata.exportAs',
383390
'DirectiveMetadata.host',
384391
'DirectiveMetadata.moduleId',
385392
'DirectiveMetadata.inputs',
393+
'DirectiveMetadata.properties',
386394
'DirectiveMetadata.queries',
387395
'DirectiveMetadata.selector',
388396
'DirectiveResolver',

modules_dart/transform/lib/src/transform/common/directive_metadata_reader.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,9 @@ class _DirectiveMetadataVisitor extends Object
235235
case 'inputs':
236236
_populateProperties(node.expression);
237237
break;
238+
case 'properties':
239+
_populateProperties(node.expression);
240+
break;
238241
case 'host':
239242
_populateHost(node.expression);
240243
break;
@@ -247,6 +250,9 @@ class _DirectiveMetadataVisitor extends Object
247250
case 'outputs':
248251
_populateEvents(node.expression);
249252
break;
253+
case 'events':
254+
_populateEvents(node.expression);
255+
break;
250256
}
251257
return null;
252258
}

tools/build/dartanalyzer.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,11 @@ _AnalyzerOutputLine.prototype = {
175175
return true;
176176
}
177177
}
178+
179+
if (this.errorCode.match(/DEPRECATED_MEMBER_USE/i)) {
180+
return true;
181+
}
182+
178183
// TODO: https://github.com/angular/ts2dart/issues/168
179184
if (this.errorCode.match(/UNUSED_CATCH_STACK/i)) {
180185
return true;

0 commit comments

Comments
 (0)
X Tutup