feat(core): renames Property into Input and Event into Output

BREACKING CHANGE:

Before: @Directive({properties: ['one'], events: ['two']})
After: @Directive({inputs: ['one'], outputs: ['two']})

Before: @Component({properties: ['one'], events: ['two']})
After: @Componet({inputs: ['one'], outputs: ['two']})

Before: class A {@Property() one; @Event() two;}
After: class A {@Input() one; @Output() two;}
This commit is contained in:
vsavkin 2015-09-30 20:59:23 -07:00
parent 33593cf8a2
commit adbfd29fd7
89 changed files with 405 additions and 423 deletions

View File

@ -77,8 +77,8 @@ class ProtoViewVisitor implements TemplateAstVisitor {
if (ast.isBound()) {
this.boundElementCount++;
}
templateVisitAll(this, ast.properties, null);
templateVisitAll(this, ast.events);
templateVisitAll(this, ast.inputs, null);
templateVisitAll(this, ast.outputs);
templateVisitAll(this, ast.exportAsVars);
for (var i = 0; i < ast.directives.length; i++) {
ast.directives[i].visit(this, i);
@ -158,7 +158,7 @@ class ProtoViewVisitor implements TemplateAstVisitor {
});
this.directiveRecords.push(directiveRecord);
templateVisitAll(this, ast.properties, directiveRecord);
templateVisitAll(this, ast.inputs, directiveRecord);
var bindingRecords = this.bindingRecords;
if (directiveRecord.callOnChanges) {
bindingRecords.push(BindingRecord.createDirectiveOnChanges(directiveRecord));

View File

@ -246,7 +246,7 @@ class CommandBuilderVisitor<R> implements TemplateAstVisitor {
}
visitElement(ast: ElementAst, context: any): any {
var component = ast.getComponent();
var eventTargetAndNames = visitAndReturnContext(this, ast.events, []);
var eventTargetAndNames = visitAndReturnContext(this, ast.outputs, []);
var variableNameAndValues = [];
if (isBlank(component)) {
ast.exportAsVars.forEach((varAst) => {

View File

@ -94,16 +94,16 @@ export class CompileTemplateMetadata {
}
export class CompileDirectiveMetadata {
static create({type, isComponent, dynamicLoadable, selector, exportAs, changeDetection,
properties, events, host, lifecycleHooks, template}: {
static create({type, isComponent, dynamicLoadable, selector, exportAs, changeDetection, inputs,
outputs, host, lifecycleHooks, template}: {
type?: CompileTypeMetadata,
isComponent?: boolean,
dynamicLoadable?: boolean,
selector?: string,
exportAs?: string,
changeDetection?: ChangeDetectionStrategy,
properties?: string[],
events?: string[],
inputs?: string[],
outputs?: string[],
host?: StringMap<string, string>,
lifecycleHooks?: LifecycleHooks[],
template?: CompileTemplateMetadata
@ -123,22 +123,22 @@ export class CompileDirectiveMetadata {
}
});
}
var propsMap = {};
if (isPresent(properties)) {
properties.forEach((bindConfig: string) => {
var inputsMap = {};
if (isPresent(inputs)) {
inputs.forEach((bindConfig: string) => {
// canonical syntax: `dirProp: elProp`
// if there is no `:`, use dirProp = elProp
var parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);
propsMap[parts[0]] = parts[1];
inputsMap[parts[0]] = parts[1];
});
}
var eventsMap = {};
if (isPresent(events)) {
events.forEach((bindConfig: string) => {
var outputsMap = {};
if (isPresent(outputs)) {
outputs.forEach((bindConfig: string) => {
// canonical syntax: `dirProp: elProp`
// if there is no `:`, use dirProp = elProp
var parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);
eventsMap[parts[0]] = parts[1];
outputsMap[parts[0]] = parts[1];
});
}
@ -149,8 +149,8 @@ export class CompileDirectiveMetadata {
selector: selector,
exportAs: exportAs,
changeDetection: changeDetection,
properties: propsMap,
events: eventsMap,
inputs: inputsMap,
outputs: outputsMap,
hostListeners: hostListeners,
hostProperties: hostProperties,
hostAttributes: hostAttributes,
@ -164,23 +164,23 @@ export class CompileDirectiveMetadata {
selector: string;
exportAs: string;
changeDetection: ChangeDetectionStrategy;
properties: StringMap<string, string>;
events: StringMap<string, string>;
inputs: StringMap<string, string>;
outputs: StringMap<string, string>;
hostListeners: StringMap<string, string>;
hostProperties: StringMap<string, string>;
hostAttributes: StringMap<string, string>;
lifecycleHooks: LifecycleHooks[];
template: CompileTemplateMetadata;
constructor({type, isComponent, dynamicLoadable, selector, exportAs, changeDetection, properties,
events, hostListeners, hostProperties, hostAttributes, lifecycleHooks, template}: {
constructor({type, isComponent, dynamicLoadable, selector, exportAs, changeDetection, inputs,
outputs, hostListeners, hostProperties, hostAttributes, lifecycleHooks, template}: {
type?: CompileTypeMetadata,
isComponent?: boolean,
dynamicLoadable?: boolean,
selector?: string,
exportAs?: string,
changeDetection?: ChangeDetectionStrategy,
properties?: StringMap<string, string>,
events?: StringMap<string, string>,
inputs?: StringMap<string, string>,
outputs?: StringMap<string, string>,
hostListeners?: StringMap<string, string>,
hostProperties?: StringMap<string, string>,
hostAttributes?: StringMap<string, string>,
@ -193,8 +193,8 @@ export class CompileDirectiveMetadata {
this.selector = selector;
this.exportAs = exportAs;
this.changeDetection = changeDetection;
this.properties = properties;
this.events = events;
this.inputs = inputs;
this.outputs = outputs;
this.hostListeners = hostListeners;
this.hostProperties = hostProperties;
this.hostAttributes = hostAttributes;
@ -212,8 +212,8 @@ export class CompileDirectiveMetadata {
changeDetection: isPresent(data['changeDetection']) ?
CHANGE_DECTION_STRATEGY_VALUES[data['changeDetection']] :
data['changeDetection'],
properties: data['properties'],
events: data['events'],
inputs: data['inputs'],
outputs: data['outputs'],
hostListeners: data['hostListeners'],
hostProperties: data['hostProperties'],
hostAttributes: data['hostAttributes'],
@ -233,8 +233,8 @@ export class CompileDirectiveMetadata {
'type': isPresent(this.type) ? this.type.toJson() : this.type,
'changeDetection': isPresent(this.changeDetection) ? serializeEnum(this.changeDetection) :
this.changeDetection,
'properties': this.properties,
'events': this.events,
'inputs': this.inputs,
'outputs': this.outputs,
'hostListeners': this.hostListeners,
'hostProperties': this.hostProperties,
'hostAttributes': this.hostAttributes,
@ -253,8 +253,8 @@ export function createHostComponentMeta(componentType: CompileTypeMetadata,
template: new CompileTemplateMetadata(
{template: template, templateUrl: '', styles: [], styleUrls: [], ngContentSelectors: []}),
changeDetection: ChangeDetectionStrategy.Default,
properties: [],
events: [],
inputs: [],
outputs: [],
host: {},
lifecycleHooks: [],
isComponent: true,

View File

@ -58,8 +58,8 @@ export class RuntimeMetadataResolver {
{name: stringify(directiveType), moduleId: moduleId, runtime: directiveType}),
template: templateMeta,
changeDetection: changeDetectionStrategy,
properties: directiveAnnotation.properties,
events: directiveAnnotation.events,
inputs: directiveAnnotation.inputs,
outputs: directiveAnnotation.outputs,
host: directiveAnnotation.host,
lifecycleHooks: ListWrapper.filter(LIFECYCLE_HOOKS_VALUES,
hook => hasLifecycleHook(hook, directiveType))

View File

@ -56,7 +56,7 @@ export class VariableAst implements TemplateAst {
export class ElementAst implements TemplateAst {
constructor(public name: string, public attrs: AttrAst[],
public properties: BoundElementPropertyAst[], public events: BoundEventAst[],
public inputs: BoundElementPropertyAst[], public outputs: BoundEventAst[],
public exportAsVars: VariableAst[], public directives: DirectiveAst[],
public children: TemplateAst[], public ngContentIndex: number,
public sourceInfo: string) {}
@ -65,7 +65,7 @@ export class ElementAst implements TemplateAst {
}
isBound(): boolean {
return (this.properties.length > 0 || this.events.length > 0 || this.exportAsVars.length > 0 ||
return (this.inputs.length > 0 || this.outputs.length > 0 || this.exportAsVars.length > 0 ||
this.directives.length > 0);
}
@ -95,7 +95,7 @@ export class BoundDirectivePropertyAst implements TemplateAst {
export class DirectiveAst implements TemplateAst {
constructor(public directive: CompileDirectiveMetadata,
public properties: BoundDirectivePropertyAst[],
public inputs: BoundDirectivePropertyAst[],
public hostProperties: BoundElementPropertyAst[], public hostEvents: BoundEventAst[],
public exportAsVars: VariableAst[], public sourceInfo: string) {}
visit(visitor: TemplateAstVisitor, context: any): any {

View File

@ -65,8 +65,8 @@ export class TemplateCompiler {
selector: directive.selector,
exportAs: directive.exportAs,
changeDetection: directive.changeDetection,
properties: directive.properties,
events: directive.events,
inputs: directive.inputs,
outputs: directive.outputs,
hostListeners: directive.hostListeners,
hostProperties: directive.hostProperties,
hostAttributes: directive.hostAttributes,

View File

@ -415,7 +415,7 @@ class TemplateParseVisitor implements HtmlAstVisitor {
this._createDirectiveHostPropertyAsts(elementName, directive.hostProperties, sourceInfo,
hostProperties);
this._createDirectiveHostEventAsts(directive.hostListeners, sourceInfo, hostEvents);
this._createDirectivePropertyAsts(directive.properties, props, directiveProperties);
this._createDirectivePropertyAsts(directive.inputs, props, directiveProperties);
var exportAsVars = [];
possibleExportAsVars.forEach((varAst) => {
if ((varAst.value.length === 0 && directive.isComponent) ||
@ -489,7 +489,7 @@ class TemplateParseVisitor implements HtmlAstVisitor {
var boundElementProps: BoundElementPropertyAst[] = [];
var boundDirectivePropsIndex = new Map<string, BoundDirectivePropertyAst>();
directives.forEach((directive: DirectiveAst) => {
directive.properties.forEach((prop: BoundDirectivePropertyAst) => {
directive.inputs.forEach((prop: BoundDirectivePropertyAst) => {
boundDirectivePropsIndex.set(prop.templateName, prop);
});
});

View File

@ -157,7 +157,7 @@ export class ChangeDetectorRef {
* }
* }
*
* @Component({selector: 'live-data', properties: ['live']})
* @Component({selector: 'live-data', inputs: ['live']})
* @View({
* template: `Data: {{dataProvider.data}}`
* })

View File

@ -21,7 +21,7 @@ import {BaseException, WrappedException} from "angular2/src/core/facade/exceptio
* parentProp = "init";
* }
*
* @Directive({selector: 'child', properties: ['prop']})
* @Directive({selector: 'child', inputs: ['prop']})
* class Child {
* constructor(public parent: Parent) {}
*
@ -49,7 +49,7 @@ export class ExpressionChangedAfterItHasBeenCheckedException extends BaseExcepti
* ### Example ([live demo](http://plnkr.co/edit/2Kywoz?p=preview))
*
* ```typescript
* @Directive({selector: 'child', properties: ['prop']})
* @Directive({selector: 'child', inputs: ['prop']})
* class Child {
* prop;
* }

View File

@ -5,8 +5,8 @@ import {ListWrapper, StringMap, StringMapWrapper} from 'angular2/src/core/facade
import {
DirectiveMetadata,
ComponentMetadata,
PropertyMetadata,
EventMetadata,
InputMetadata,
OutputMetadata,
HostBindingMetadata,
HostListenerMetadata,
ContentChildrenMetadata,
@ -45,26 +45,26 @@ export class DirectiveResolver {
private _mergeWithPropertyMetadata(dm: DirectiveMetadata,
propertyMetadata:
StringMap<string, any[]>): DirectiveMetadata {
var properties = [];
var events = [];
var inputs = [];
var outputs = [];
var host = {};
var queries = {};
StringMapWrapper.forEach(propertyMetadata, (metadata: any[], propName: string) => {
metadata.forEach(a => {
if (a instanceof PropertyMetadata) {
if (a instanceof InputMetadata) {
if (isPresent(a.bindingPropertyName)) {
properties.push(`${propName}: ${a.bindingPropertyName}`);
inputs.push(`${propName}: ${a.bindingPropertyName}`);
} else {
properties.push(propName);
inputs.push(propName);
}
}
if (a instanceof EventMetadata) {
if (a instanceof OutputMetadata) {
if (isPresent(a.bindingPropertyName)) {
events.push(`${propName}: ${a.bindingPropertyName}`);
outputs.push(`${propName}: ${a.bindingPropertyName}`);
} else {
events.push(propName);
outputs.push(propName);
}
}
@ -98,15 +98,14 @@ export class DirectiveResolver {
}
});
});
return this._merge(dm, properties, events, host, queries);
return this._merge(dm, inputs, outputs, host, queries);
}
private _merge(dm: DirectiveMetadata, properties: string[], events: string[],
private _merge(dm: DirectiveMetadata, inputs: string[], outputs: string[],
host: StringMap<string, string>,
queries: StringMap<string, any>): DirectiveMetadata {
var mergedProperties =
isPresent(dm.properties) ? ListWrapper.concat(dm.properties, properties) : properties;
var mergedEvents = isPresent(dm.events) ? ListWrapper.concat(dm.events, events) : events;
var mergedInputs = isPresent(dm.inputs) ? ListWrapper.concat(dm.inputs, inputs) : inputs;
var mergedOutputs = isPresent(dm.outputs) ? ListWrapper.concat(dm.outputs, outputs) : outputs;
var mergedHost = isPresent(dm.host) ? StringMapWrapper.merge(dm.host, host) : host;
var mergedQueries =
isPresent(dm.queries) ? StringMapWrapper.merge(dm.queries, queries) : queries;
@ -114,8 +113,8 @@ export class DirectiveResolver {
if (dm instanceof ComponentMetadata) {
return new ComponentMetadata({
selector: dm.selector,
properties: mergedProperties,
events: mergedEvents,
inputs: mergedInputs,
outputs: mergedOutputs,
host: mergedHost,
bindings: dm.bindings,
exportAs: dm.exportAs,
@ -129,8 +128,8 @@ export class DirectiveResolver {
} else {
return new DirectiveMetadata({
selector: dm.selector,
properties: mergedProperties,
events: mergedEvents,
inputs: mergedInputs,
outputs: mergedOutputs,
host: mergedHost,
bindings: dm.bindings,
exportAs: dm.exportAs,

View File

@ -151,7 +151,8 @@ export class DirectiveBinding extends ResolvedBinding {
}
get eventEmitters(): string[] {
return isPresent(this.metadata) && isPresent(this.metadata.events) ? this.metadata.events : [];
return isPresent(this.metadata) && isPresent(this.metadata.outputs) ? this.metadata.outputs :
[];
}
static createFromBinding(binding: Binding, meta: DirectiveMetadata): DirectiveBinding {
@ -170,9 +171,9 @@ export class DirectiveBinding extends ResolvedBinding {
RenderDirectiveMetadata.DIRECTIVE_TYPE,
selector: meta.selector,
compileChildren: meta.compileChildren,
events: meta.events,
outputs: meta.outputs,
host: isPresent(meta.host) ? MapWrapper.createFromStringMap(meta.host) : null,
properties: meta.properties,
inputs: meta.inputs,
readAttributes: DirectiveBinding._readAttributes(<any>deps),
queries: meta.queries,

View File

@ -50,7 +50,7 @@ export var LIFECYCLE_HOOKS_VALUES = [
* propB;
*
* onChanges(changes: {[idx: string, PropertyUpdate]}): void {
* // This will get called after any of the properties have been updated.
* // This will get called after any of the inputs have been updated.
* if (changes['propA']) {
* // if propA was updated
* }

View File

@ -35,7 +35,7 @@ import {
* </div>
* ```
*/
@Directive({selector: '[ng-class]', properties: ['rawClass: ng-class', 'initialClasses: class']})
@Directive({selector: '[ng-class]', inputs: ['rawClass: ng-class', 'initialClasses: class']})
export class NgClass implements DoCheck, OnDestroy {
private _differ: any;
private _mode: string;

View File

@ -39,7 +39,7 @@ import {isPresent, isBlank} from 'angular2/src/core/facade/lang';
* - `<li template="ng-for #item of items; #i = index">...</li>`
* - `<template ng-for #item [ng-for-of]="items" #i="index"><li>...</li></template>`
*/
@Directive({selector: '[ng-for][ng-for-of]', properties: ['ngForOf']})
@Directive({selector: '[ng-for][ng-for-of]', inputs: ['ngForOf']})
export class NgFor implements DoCheck {
_ngForOf: any;
private _differ: IterableDiffer;

View File

@ -24,7 +24,7 @@ import {isBlank} from 'angular2/src/core/facade/lang';
* - `<div template="ng-if condition">...</div>`
* - `<template [ng-if]="condition"><div>...</div></template>`
*/
@Directive({selector: '[ng-if]', properties: ['ngIf']})
@Directive({selector: '[ng-if]', inputs: ['ngIf']})
export class NgIf {
private _prevCondition: boolean = null;

View File

@ -29,7 +29,7 @@ import {isPresent, isBlank, print} from 'angular2/src/core/facade/lang';
* - `<div [ng-style]="{'text-align': alignExp}"></div>`
* - `<div [ng-style]="styleExp"></div>`
*/
@Directive({selector: '[ng-style]', properties: ['rawStyle: ng-style']})
@Directive({selector: '[ng-style]', inputs: ['rawStyle: ng-style']})
export class NgStyle implements DoCheck {
_rawStyle;
_differ: KeyValueDiffer;

View File

@ -39,7 +39,7 @@ export class SwitchView {
* </ANY>
* ```
*/
@Directive({selector: '[ng-switch]', properties: ['ngSwitch']})
@Directive({selector: '[ng-switch]', inputs: ['ngSwitch']})
export class NgSwitch {
private _switchValue: any;
private _useDefault: boolean = false;
@ -139,7 +139,7 @@ export class NgSwitch {
* <template ng-switch-when="stringValue">...</template>
* ```
*/
@Directive({selector: '[ng-switch-when]', properties: ['ngSwitchWhen']})
@Directive({selector: '[ng-switch-when]', inputs: ['ngSwitchWhen']})
export class NgSwitchWhen {
// `_WHEN_DEFAULT` is used as a marker for a not yet initialized value
_value: any = _WHEN_DEFAULT;

View File

@ -91,7 +91,7 @@ export class Observable {
}
/**
* Use by directives and components to emit custom {@link Event}s.
* Use by directives and components to emit custom Events.
*
* ## Examples
*
@ -109,8 +109,8 @@ export class Observable {
* </div>`})
* export class Zippy {
* visible: boolean = true;
* @Event() open: EventEmitter = new EventEmitter();
* @Event() close: EventEmitter = new EventEmitter();
* @Output() open: EventEmitter = new EventEmitter();
* @Output() close: EventEmitter = new EventEmitter();
*
* toggle() {
* this.visible = !this.visible;

View File

@ -53,7 +53,7 @@ const controlGroupBinding =
@Directive({
selector: '[ng-control-group]',
bindings: [controlGroupBinding],
properties: ['name: ng-control-group'],
inputs: ['name: ng-control-group'],
exportAs: 'form'
})
export class NgControlGroup extends ControlContainer implements OnInit,

View File

@ -75,8 +75,8 @@ const controlNameBinding =
@Directive({
selector: '[ng-control]',
bindings: [controlNameBinding],
properties: ['name: ngControl', 'model: ngModel'],
events: ['update: ngModel'],
inputs: ['name: ngControl', 'model: ngModel'],
outputs: ['update: ngModel'],
exportAs: 'form'
})
export class NgControlName extends NgControl implements OnChanges,

View File

@ -85,7 +85,7 @@ const formDirectiveBinding =
host: {
'(submit)': 'onSubmit()',
},
events: ['ngSubmit'],
outputs: ['ngSubmit'],
exportAs: 'form'
})
export class NgForm extends ControlContainer implements Form {

View File

@ -65,8 +65,8 @@ const formControlBinding =
@Directive({
selector: '[ng-form-control]',
bindings: [formControlBinding],
properties: ['form: ngFormControl', 'model: ngModel'],
events: ['update: ngModel'],
inputs: ['form: ngFormControl', 'model: ngModel'],
outputs: ['update: ngModel'],
exportAs: 'form'
})
export class NgFormControl extends NgControl implements OnChanges {

View File

@ -92,9 +92,9 @@ const formDirectiveBinding =
@Directive({
selector: '[ng-form-model]',
bindings: [formDirectiveBinding],
properties: ['form: ng-form-model'],
inputs: ['form: ng-form-model'],
host: {'(submit)': 'onSubmit()'},
events: ['ngSubmit'],
outputs: ['ngSubmit'],
exportAs: 'form'
})
export class NgFormModel extends ControlContainer implements Form,

View File

@ -36,8 +36,8 @@ const formControlBinding = CONST_EXPR(new Binding(NgControl, {toAlias: forwardRe
@Directive({
selector: '[ng-model]:not([ng-control]):not([ng-form-control])',
bindings: [formControlBinding],
properties: ['model: ngModel'],
events: ['update: ngModel'],
inputs: ['model: ngModel'],
outputs: ['update: ngModel'],
exportAs: 'form'
})
export class NgModel extends NgControl implements OnChanges {

View File

@ -14,15 +14,15 @@ export './metadata/view.dart';
* See: [DirectiveMetadata] for docs.
*/
class Directive extends DirectiveMetadata {
const Directive({String selector, List<String> properties,
List<String> events, Map<String, String> host,
const Directive({String selector, List<String> inputs,
List<String> outputs, Map<String, String> host,
List bindings, String exportAs, String moduleId,
Map<String, dynamic> queries,
bool compileChildren: true})
: super(
selector: selector,
properties: properties,
events: events,
inputs: inputs,
outputs: outputs,
host: host,
bindings: bindings,
exportAs: exportAs,
@ -35,15 +35,15 @@ class Directive extends DirectiveMetadata {
* See: [ComponentMetadata] for docs.
*/
class Component extends ComponentMetadata {
const Component({String selector, List<String> properties,
List<String> events, Map<String, String> host,
const Component({String selector, List<String> inputs,
List<String> outputs, Map<String, String> host,
List bindings, String exportAs, String moduleId,
Map<String, dynamic> queries,
bool compileChildren, List viewBindings, ChangeDetectionStrategy changeDetection})
: super(
selector: selector,
properties: properties,
events: events,
inputs: inputs,
outputs: outputs,
host: host,
bindings: bindings,
exportAs: exportAs,
@ -134,18 +134,18 @@ class ViewChild extends ViewChildMetadata {
}
/**
* See: [PropertyMetadata] for docs.
* See: [InputMetadata] for docs.
*/
class Property extends PropertyMetadata {
const Property([String bindingPropertyName])
class Input extends InputMetadata {
const Input([String bindingPropertyName])
: super(bindingPropertyName);
}
/**
* See: [EventMetadata] for docs.
* See: [OutputMetadata] for docs.
*/
class Event extends EventMetadata {
const Event([String bindingPropertyName])
class Output extends OutputMetadata {
const Output([String bindingPropertyName])
: super(bindingPropertyName);
}

View File

@ -17,8 +17,8 @@ export {
ComponentMetadata,
DirectiveMetadata,
PipeMetadata,
PropertyMetadata,
EventMetadata,
InputMetadata,
OutputMetadata,
HostBindingMetadata,
HostListenerMetadata
} from './metadata/directives';
@ -39,8 +39,8 @@ import {
ComponentMetadata,
DirectiveMetadata,
PipeMetadata,
PropertyMetadata,
EventMetadata,
InputMetadata,
OutputMetadata,
HostBindingMetadata,
HostListenerMetadata
} from './metadata/directives';
@ -147,8 +147,8 @@ export interface ViewDecorator extends TypeDecorator {
export interface DirectiveFactory {
(obj: {
selector?: string,
properties?: string[],
events?: string[],
inputs?: string[],
outputs?: string[],
host?: StringMap<string, string>,
bindings?: any[],
exportAs?: string,
@ -158,8 +158,8 @@ export interface DirectiveFactory {
}): DirectiveDecorator;
new (obj: {
selector?: string,
properties?: string[],
events?: string[],
inputs?: string[],
outputs?: string[],
host?: StringMap<string, string>,
bindings?: any[],
exportAs?: string,
@ -215,8 +215,8 @@ export interface DirectiveFactory {
export interface ComponentFactory {
(obj: {
selector?: string,
properties?: string[],
events?: string[],
inputs?: string[],
outputs?: string[],
host?: StringMap<string, string>,
bindings?: any[],
exportAs?: string,
@ -228,8 +228,8 @@ export interface ComponentFactory {
}): ComponentDecorator;
new (obj: {
selector?: string,
properties?: string[],
events?: string[],
inputs?: string[],
outputs?: string[],
host?: StringMap<string, string>,
bindings?: any[],
exportAs?: string,
@ -452,21 +452,21 @@ export interface PipeFactory {
}
/**
* {@link PropertyMetadata} factory for creating decorators.
* {@link InputMetadata} factory for creating decorators.
*
* See {@link PropertyMetadata}.
* See {@link InputMetadata}.
*/
export interface PropertyFactory {
export interface InputFactory {
(bindingPropertyName?: string): any;
new (bindingPropertyName?: string): any;
}
/**
* {@link EventMetadata} factory for creating decorators.
* {@link OutputMetadata} factory for creating decorators.
*
* See {@link EventMetadata}.
* See {@link OutputMetadata}.
*/
export interface EventFactory {
export interface OutputFactory {
(bindingPropertyName?: string): any;
new (bindingPropertyName?: string): any;
}
@ -567,18 +567,18 @@ export var ViewQuery: QueryFactory = makeParamDecorator(ViewQueryMetadata);
export var Pipe: PipeFactory = <PipeFactory>makeDecorator(PipeMetadata);
/**
* {@link PropertyMetadata} factory function.
* {@link InputMetadata} factory function.
*
* See {@link PropertyMetadata}.
* See {@link InputMetadata}.
*/
export var Property: PropertyFactory = makePropDecorator(PropertyMetadata);
export var Input: InputFactory = makePropDecorator(InputMetadata);
/**
* {@link EventMetadata} factory function.
* {@link OutputMetadata} factory function.
*
* See {@link EventMetadata}.
* See {@link OutputMetadatas}.
*/
export var Event: EventFactory = makePropDecorator(EventMetadata);
export var Output: OutputFactory = makePropDecorator(OutputMetadata);
/**
* {@link HostBindingMetadata} factory function.

View File

@ -71,7 +71,7 @@ export class AttributeMetadata extends DependencyMetadata {
* ```javascript
* @Component({
* selector: 'pane',
* properties: ['title']
* inputs: ['title']
* })
* @View(...)
* class Pane {

View File

@ -96,7 +96,7 @@ import {ChangeDetectionStrategy} from 'angular2/src/core/change_detection';
*
* @Directive({
* selector: '[dependency]',
* properties: [
* inputs: [
* 'id: dependency'
* ]
* })
@ -242,7 +242,7 @@ import {ChangeDetectionStrategy} from 'angular2/src/core/change_detection';
* ```
* @Directive({
* selector: '[tooltip]',
* properties: [
* inputs: [
* 'text: tooltip'
* ],
* host: {
@ -332,7 +332,7 @@ import {ChangeDetectionStrategy} from 'angular2/src/core/change_detection';
* ```
* @Directive({
* selector: '[unless]',
* properties: ['unless']
* inputs: ['unless']
* })
* export class Unless {
* viewContainer: ViewContainerRef;
@ -417,11 +417,11 @@ export class DirectiveMetadata extends InjectableMetadata {
selector: string;
/**
* Enumerates the set of data-bound properties for a directive
* Enumerates the set of data-bound input properties for a directive
*
* Angular automatically updates data-bound properties during change detection.
* Angular automatically updates input properties during change detection.
*
* The `properties` property defines a set of `directiveProperty` to `bindingProperty`
* The `inputs` property defines a set of `directiveProperty` to `bindingProperty`
* configuration:
*
* - `directiveProperty` specifies the component property where the value is written.
@ -436,7 +436,7 @@ export class DirectiveMetadata extends InjectableMetadata {
* ```typescript
* @Component({
* selector: 'bank-account',
* properties: ['bankName', 'id: account-id']
* inputs: ['bankName', 'id: account-id']
* })
* @View({
* template: `
@ -465,15 +465,15 @@ export class DirectiveMetadata extends InjectableMetadata {
* ```
*
*/
properties: string[];
inputs: string[];
/**
* Enumerates the set of event-bound properties.
* Enumerates the set of event-bound output properties.
*
* When an event-bound property emits an event, an event handler attached to that event
* When an output property emits an event, an event handler attached to that event
* the template is invoked.
*
* The `events` property defines a set of `directiveProperty` to `bindingProperty`
* The `outputs` property defines a set of `directiveProperty` to `bindingProperty`
* configuration:
*
* - `directiveProperty` specifies the component property that emits events.
@ -484,7 +484,7 @@ export class DirectiveMetadata extends InjectableMetadata {
* ```typescript
* @Directive({
* selector: 'interval-dir',
* events: ['everySecond', 'five5Secs: everyFiveSeconds']
* outputs: ['everySecond', 'five5Secs: everyFiveSeconds']
* })
* class IntervalDir {
* everySecond = new EventEmitter();
@ -512,7 +512,7 @@ export class DirectiveMetadata extends InjectableMetadata {
* ```
*
*/
events: string[];
outputs: string[];
/**
* Specify the events, actions, properties and attributes related to the host element.
@ -739,12 +739,12 @@ export class DirectiveMetadata extends InjectableMetadata {
queries: StringMap<string, any>;
constructor({
selector, properties, events, host, bindings, exportAs, moduleId, queries,
selector, inputs, outputs, host, bindings, exportAs, moduleId, queries,
compileChildren = true,
}: {
selector?: string,
properties?: string[],
events?: string[],
inputs?: string[],
outputs?: string[],
host?: StringMap<string, string>,
bindings?: any[],
exportAs?: string,
@ -754,8 +754,8 @@ export class DirectiveMetadata extends InjectableMetadata {
} = {}) {
super();
this.selector = selector;
this.properties = properties;
this.events = events;
this.inputs = inputs;
this.outputs = outputs;
this.host = host;
this.exportAs = exportAs;
this.moduleId = moduleId;
@ -861,12 +861,12 @@ export class ComponentMetadata extends DirectiveMetadata {
*/
viewBindings: any[];
constructor({selector, properties, events, host, exportAs, moduleId, bindings, viewBindings,
constructor({selector, inputs, outputs, host, exportAs, moduleId, bindings, viewBindings,
changeDetection = ChangeDetectionStrategy.Default, queries, compileChildren = true}:
{
selector?: string,
properties?: string[],
events?: string[],
inputs?: string[],
outputs?: string[],
host?: StringMap<string, string>,
bindings?: any[],
exportAs?: string,
@ -878,8 +878,8 @@ export class ComponentMetadata extends DirectiveMetadata {
} = {}) {
super({
selector: selector,
properties: properties,
events: events,
inputs: inputs,
outputs: outputs,
host: host,
exportAs: exportAs,
moduleId: moduleId,
@ -922,17 +922,17 @@ export class PipeMetadata extends InjectableMetadata {
}
/**
* Declares a data-bound property.
* Declares a data-bound input property.
*
* Angular automatically updates data-bound properties during change detection.
*
* `PropertyMetadata` takes an optional parameters that specifies that name
* `InputMetadata` takes an optional parameters that specifies that name
* used when instantiating a component in the template. When not provided,
* the class property name is used.
*
* ### Example
*
* The following example creates a component with two data-bound properties.
* The following example creates a component with two input properties.
*
* ```typescript
* @Component({selector: 'bank-account'})
@ -943,8 +943,8 @@ export class PipeMetadata extends InjectableMetadata {
* `
* })
* class BankAccount {
* @Property() bankName: string;
* @Property('account-id') id: string;
* @Input() bankName: string;
* @Input('account-id') id: string;
*
* // this property is not bound, and won't be automatically updated by Angular
* normalizedBankName: string;
@ -963,7 +963,7 @@ export class PipeMetadata extends InjectableMetadata {
* ```
*/
@CONST()
export class PropertyMetadata {
export class InputMetadata {
constructor(
/**
* Name used when instantiating a component in the temlate.
@ -972,12 +972,12 @@ export class PropertyMetadata {
}
/**
* Declares an event-bound property.
* Declares an event-bound output property.
*
* When an event-bound property emits an event, an event handler attached to that event
* When an output property emits an event, an event handler attached to that event
* the template is invoked.
*
* `EventMetadata` takes an optional parameters that specifies that name
* `OutputMetadata` takes an optional parameters that specifies that name
* used when instantiating a component in the template. When not provided,
* the class property name is used.
*
@ -988,8 +988,8 @@ export class PropertyMetadata {
* selector: 'interval-dir',
* })
* class IntervalDir {
* @Event() everySecond = new EventEmitter();
* @Event('everyFiveSeconds') five5Secs = new EventEmitter();
* @Output() everySecond = new EventEmitter();
* @Output('everyFiveSeconds') five5Secs = new EventEmitter();
*
* constructor() {
* setInterval(() => this.everySecond.next("event"), 1000);
@ -1013,7 +1013,7 @@ export class PropertyMetadata {
* ```
*/
@CONST()
export class EventMetadata {
export class OutputMetadata {
constructor(public bindingPropertyName?: string) {}
}

View File

@ -143,8 +143,8 @@ export class RenderDirectiveMetadata {
id: any;
selector: string;
compileChildren: boolean;
events: string[];
properties: string[];
outputs: string[];
inputs: string[];
readAttributes: string[];
type: number;
callOnDestroy: boolean;
@ -165,18 +165,18 @@ export class RenderDirectiveMetadata {
// group 2: "event" from "(event)"
private static _hostRegExp = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\)))$/g;
constructor({id, selector, compileChildren, events, hostListeners, hostProperties, hostAttributes,
properties, readAttributes, type, callOnDestroy, callOnChanges, callDoCheck,
callOnInit, callAfterContentInit, callAfterContentChecked, callAfterViewInit,
callAfterViewChecked, changeDetection, exportAs, queries}: {
constructor({id, selector, compileChildren, outputs, hostListeners, hostProperties,
hostAttributes, inputs, readAttributes, type, callOnDestroy, callOnChanges,
callDoCheck, callOnInit, callAfterContentInit, callAfterContentChecked,
callAfterViewInit, callAfterViewChecked, changeDetection, exportAs, queries}: {
id?: string,
selector?: string,
compileChildren?: boolean,
events?: string[],
outputs?: string[],
hostListeners?: Map<string, string>,
hostProperties?: Map<string, string>,
hostAttributes?: Map<string, string>,
properties?: string[],
inputs?: string[],
readAttributes?: string[],
type?: number,
callOnDestroy?: boolean,
@ -194,11 +194,11 @@ export class RenderDirectiveMetadata {
this.id = id;
this.selector = selector;
this.compileChildren = isPresent(compileChildren) ? compileChildren : true;
this.events = events;
this.outputs = outputs;
this.hostListeners = hostListeners;
this.hostAttributes = hostAttributes;
this.hostProperties = hostProperties;
this.properties = properties;
this.inputs = inputs;
this.readAttributes = readAttributes;
this.type = type;
this.callOnDestroy = callOnDestroy;
@ -214,16 +214,16 @@ export class RenderDirectiveMetadata {
this.queries = queries;
}
static create({id, selector, compileChildren, events, host, properties, readAttributes, type,
static create({id, selector, compileChildren, outputs, host, inputs, readAttributes, type,
callOnDestroy, callOnChanges, callDoCheck, callOnInit, callAfterContentInit,
callAfterContentChecked, callAfterViewInit, callAfterViewChecked, changeDetection,
exportAs, queries}: {
id?: string,
selector?: string,
compileChildren?: boolean,
events?: string[],
outputs?: string[],
host?: Map<string, string>,
properties?: string[],
inputs?: string[],
readAttributes?: string[],
type?: number,
callOnDestroy?: boolean,
@ -259,11 +259,11 @@ export class RenderDirectiveMetadata {
id: id,
selector: selector,
compileChildren: compileChildren,
events: events,
outputs: outputs,
hostListeners: hostListeners,
hostProperties: hostProperties,
hostAttributes: hostAttributes,
properties: properties,
inputs: inputs,
readAttributes: readAttributes,
type: type,
callOnDestroy: callOnDestroy,

View File

@ -65,8 +65,8 @@ export class DirectiveParser implements CompileStep {
var dirMetadata = this._directives[directiveIndex];
var directiveBinderBuilder = elementBinder.bindDirective(directiveIndex);
current.compileChildren = current.compileChildren && dirMetadata.compileChildren;
if (isPresent(dirMetadata.properties)) {
ListWrapper.forEach(dirMetadata.properties, (bindConfig) => {
if (isPresent(dirMetadata.inputs)) {
ListWrapper.forEach(dirMetadata.inputs, (bindConfig) => {
this._bindDirectiveProperty(bindConfig, current, directiveBinderBuilder);
});
}

View File

@ -26,8 +26,8 @@ export class MockDirectiveResolver extends DirectiveResolver {
return new ComponentMetadata({
selector: dm.selector,
properties: dm.properties,
events: dm.events,
inputs: dm.inputs,
outputs: dm.outputs,
host: dm.host,
bindings: bindings,
exportAs: dm.exportAs,
@ -41,8 +41,8 @@ export class MockDirectiveResolver extends DirectiveResolver {
return new DirectiveMetadata({
selector: dm.selector,
properties: dm.properties,
events: dm.events,
inputs: dm.inputs,
outputs: dm.outputs,
host: dm.host,
bindings: bindings,
exportAs: dm.exportAs,

View File

@ -36,7 +36,7 @@ import {Instruction, stringifyInstruction} from './instruction';
*/
@Directive({
selector: '[router-link]',
properties: ['routeParams: routerLink'],
inputs: ['routeParams: routerLink'],
host: {
'(click)': 'onClick()',
'[attr.href]': 'visibleHref',

View File

@ -367,8 +367,8 @@ export class Serializer {
'id': meta.id,
'selector': meta.selector,
'compileChildren': meta.compileChildren,
'events': meta.events,
'properties': meta.properties,
'events': meta.outputs,
'inputs': meta.inputs,
'readAttributes': meta.readAttributes,
'type': meta.type,
'callOnDestroy': meta.callOnDestroy,
@ -392,7 +392,7 @@ export class Serializer {
hostProperties: this.objectToMap(obj['hostProperties']),
hostListeners: this.objectToMap(obj['hostListeners']),
hostAttributes: this.objectToMap(obj['hostAttributes']),
properties: obj['properties'],
inputs: obj['inputs'],
readAttributes: obj['readAttributes'],
type: obj['type'],
exportAs: obj['exportAs'],
@ -402,7 +402,7 @@ export class Serializer {
callOnInit: obj['callOnInit'],
callAfterContentChecked: obj['callAfterContentChecked'],
changeDetection: obj['changeDetection'],
events: obj['events']
outputs: obj['events']
});
}
}

View File

@ -116,7 +116,7 @@ export function main() {
var dirMeta = CompileDirectiveMetadata.create({
type: new CompileTypeMetadata({name: 'SomeDir'}),
selector: '[dir-prop]',
properties: ['dirProp']
inputs: ['dirProp']
});
var changeDetector = createChangeDetector('<div [dir-prop]="someProp">', [dirMeta], 0);
@ -130,7 +130,7 @@ export function main() {
var dirMeta = CompileDirectiveMetadata.create({
type: new CompileTypeMetadata({name: 'SomeDir'}),
selector: '[dir-prop]',
properties: ['dirProp']
inputs: ['dirProp']
});
var changeDetector = createChangeDetector('<template [dir-prop]="someProp">', [dirMeta], 0);

View File

@ -43,8 +43,8 @@ export function main() {
dynamicLoadable: true,
type: fullTypeMeta, template: fullTemplateMeta,
changeDetection: ChangeDetectionStrategy.Default,
properties: ['someProp'],
events: ['someEvent'],
inputs: ['someProp'],
outputs: ['someEvent'],
host: {'(event1)': 'handler1', '[prop1]': 'expr1', 'attr1': 'attrValue2'},
lifecycleHooks: [LifecycleHooks.OnChanges]
});

View File

@ -53,8 +53,8 @@ export function main() {
expect(meta.type.moduleId).toEqual('someModuleId');
expect(meta.lifecycleHooks).toEqual(LIFECYCLE_HOOKS_VALUES);
expect(meta.changeDetection).toBe(ChangeDetectionStrategy.CheckAlways);
expect(meta.properties).toEqual({'someProp': 'someProp'});
expect(meta.events).toEqual({'someEvent': 'someEvent'});
expect(meta.inputs).toEqual({'someProp': 'someProp'});
expect(meta.outputs).toEqual({'someEvent': 'someEvent'});
expect(meta.hostListeners).toEqual({'someHostListener': 'someHostListenerExpr'});
expect(meta.hostProperties).toEqual({'someHostProp': 'someHostPropExpr'});
expect(meta.hostAttributes).toEqual({'someHostAttr': 'someHostAttrValue'});
@ -94,8 +94,8 @@ class DirectiveWithoutModuleId {
@Component({
selector: 'someSelector',
properties: ['someProp'],
events: ['someEvent'],
inputs: ['someProp'],
outputs: ['someEvent'],
host: {
'[someHostProp]': 'someHostPropExpr',
'(someHostListener)': 'someHostListenerExpr',

View File

@ -246,8 +246,8 @@ export function main() {
expect(normMeta.selector).toEqual(meta.selector);
expect(normMeta.exportAs).toEqual(meta.exportAs);
expect(normMeta.changeDetection).toEqual(meta.changeDetection);
expect(normMeta.properties).toEqual(meta.properties);
expect(normMeta.events).toEqual(meta.events);
expect(normMeta.inputs).toEqual(meta.inputs);
expect(normMeta.outputs).toEqual(meta.outputs);
expect(normMeta.hostListeners).toEqual(meta.hostListeners);
expect(normMeta.hostProperties).toEqual(meta.hostProperties);
expect(normMeta.hostAttributes).toEqual(meta.hostAttributes);

View File

@ -58,11 +58,8 @@ export function main() {
beforeEach(inject([TemplateParser], (_parser) => {
parser = _parser;
ngIf = CompileDirectiveMetadata.create({
selector: '[ng-if]',
type: new CompileTypeMetadata({name: 'NgIf'}),
properties: ['ngIf']
});
ngIf = CompileDirectiveMetadata.create(
{selector: '[ng-if]', type: new CompileTypeMetadata({name: 'NgIf'}), inputs: ['ngIf']});
}));
function parse(template: string, directives: CompileDirectiveMetadata[]): TemplateAst[] {
@ -415,11 +412,8 @@ export function main() {
});
it('should parse directive properties', () => {
var dirA = CompileDirectiveMetadata.create({
selector: 'div',
type: new CompileTypeMetadata({name: 'DirA'}),
properties: ['aProp']
});
var dirA = CompileDirectiveMetadata.create(
{selector: 'div', type: new CompileTypeMetadata({name: 'DirA'}), inputs: ['aProp']});
expect(humanizeTemplateAsts(parse('<div [a-prop]="expr"></div>', [dirA])))
.toEqual([
[ElementAst, 'div', 'TestComp > div:nth-child(0)'],
@ -434,11 +428,8 @@ export function main() {
});
it('should parse renamed directive properties', () => {
var dirA = CompileDirectiveMetadata.create({
selector: 'div',
type: new CompileTypeMetadata({name: 'DirA'}),
properties: ['b:a']
});
var dirA = CompileDirectiveMetadata.create(
{selector: 'div', type: new CompileTypeMetadata({name: 'DirA'}), inputs: ['b:a']});
expect(humanizeTemplateAsts(parse('<div [a]="expr"></div>', [dirA])))
.toEqual([
[ElementAst, 'div', 'TestComp > div:nth-child(0)'],
@ -449,7 +440,7 @@ export function main() {
it('should parse literal directive properties', () => {
var dirA = CompileDirectiveMetadata.create(
{selector: 'div', type: new CompileTypeMetadata({name: 'DirA'}), properties: ['a']});
{selector: 'div', type: new CompileTypeMetadata({name: 'DirA'}), inputs: ['a']});
expect(humanizeTemplateAsts(parse('<div a="literal"></div>', [dirA])))
.toEqual([
[ElementAst, 'div', 'TestComp > div:nth-child(0)'],
@ -466,7 +457,7 @@ export function main() {
it('should favor explicit bound properties over literal properties', () => {
var dirA = CompileDirectiveMetadata.create(
{selector: 'div', type: new CompileTypeMetadata({name: 'DirA'}), properties: ['a']});
{selector: 'div', type: new CompileTypeMetadata({name: 'DirA'}), inputs: ['a']});
expect(humanizeTemplateAsts(parse('<div a="literal" [a]="\'literal2\'"></div>', [dirA])))
.toEqual([
[ElementAst, 'div', 'TestComp > div:nth-child(0)'],
@ -483,7 +474,7 @@ export function main() {
it('should support optional directive properties', () => {
var dirA = CompileDirectiveMetadata.create(
{selector: 'div', type: new CompileTypeMetadata({name: 'DirA'}), properties: ['a']});
{selector: 'div', type: new CompileTypeMetadata({name: 'DirA'}), inputs: ['a']});
expect(humanizeTemplateAsts(parse('<div></div>', [dirA])))
.toEqual([
[ElementAst, 'div', 'TestComp > div:nth-child(0)'],
@ -621,11 +612,8 @@ There is no directive with "exportAs" set to "dirA" at TestComp > div:nth-child(
describe('directives', () => {
it('should locate directives in property bindings', () => {
var dirA = CompileDirectiveMetadata.create({
selector: '[a=b]',
type: new CompileTypeMetadata({name: 'DirA'}),
properties: ['a']
});
var dirA = CompileDirectiveMetadata.create(
{selector: '[a=b]', type: new CompileTypeMetadata({name: 'DirA'}), inputs: ['a']});
var dirB = CompileDirectiveMetadata.create(
{selector: '[b]', type: new CompileTypeMetadata({name: 'DirB'})});
expect(humanizeTemplateAsts(parse('<div template="a b" b>', [dirA, dirB])))
@ -791,7 +779,7 @@ Parser Error: Unexpected token 'b' at column 3 in [a b] in TestComp > div:nth-ch
var dirA = CompileDirectiveMetadata.create({
selector: 'div',
type: new CompileTypeMetadata({name: 'DirA'}),
properties: ['invalidProp']
inputs: ['invalidProp']
});
expect(() => parse('<div [invalid-prop]></div>', [dirA])).not.toThrow();
});
@ -957,8 +945,8 @@ class TemplateHumanizer implements TemplateAstVisitor {
visitElement(ast: ElementAst, context: any): any {
this.result.push([ElementAst, ast.name, ast.sourceInfo]);
templateVisitAll(this, ast.attrs);
templateVisitAll(this, ast.properties);
templateVisitAll(this, ast.events);
templateVisitAll(this, ast.inputs);
templateVisitAll(this, ast.outputs);
templateVisitAll(this, ast.exportAsVars);
templateVisitAll(this, ast.directives);
templateVisitAll(this, ast.children);
@ -1003,7 +991,7 @@ class TemplateHumanizer implements TemplateAstVisitor {
}
visitDirective(ast: DirectiveAst, context: any): any {
this.result.push([DirectiveAst, ast.directive, ast.sourceInfo]);
templateVisitAll(this, ast.properties);
templateVisitAll(this, ast.inputs);
templateVisitAll(this, ast.hostProperties);
templateVisitAll(this, ast.hostEvents);
templateVisitAll(this, ast.exportAsVars);

View File

@ -276,7 +276,7 @@ export function main() {
it('should set directive.bind', inject([AsyncTestCompleter], (async) => {
captureDirective(DirectiveWithBind)
.then((renderDir) => {
expect(renderDir.properties).toEqual(['a: b']);
expect(renderDir.inputs).toEqual(['a: b']);
async.done();
});
}));
@ -685,7 +685,7 @@ class DirectiveWithEvents {
class DirectiveWithProperties {
}
@Directive({properties: ['a: b']})
@Directive({inputs: ['a: b']})
class DirectiveWithBind {
}

View File

@ -3,8 +3,8 @@ import {DirectiveResolver} from 'angular2/src/core/compiler/directive_resolver';
import {
DirectiveMetadata,
Directive,
Property,
Event,
Input,
Output,
HostBinding,
HostListener,
ContentChildren,
@ -25,31 +25,31 @@ class SomeDirective {
class SomeChildDirective extends SomeDirective {
}
@Directive({selector: 'someDirective', properties: ['c']})
@Directive({selector: 'someDirective', inputs: ['c']})
class SomeDirectiveWithProperties {
@Property() a;
@Property("renamed") b;
@Input() a;
@Input("renamed") b;
c;
}
@Directive({selector: 'someDirective', events: ['c']})
class SomeDirectiveWithEvents {
@Event() a;
@Event("renamed") b;
@Directive({selector: 'someDirective', outputs: ['c']})
class SomeDirectiveWithOutputs {
@Output() a;
@Output("renamed") b;
c;
}
@Directive({selector: 'someDirective'})
class SomeDirectiveWithSetterProps {
@Property("renamed")
@Input("renamed")
set a(value) {
}
}
@Directive({selector: 'someDirective'})
class SomeDirectiveWithGetterEvents {
@Event("renamed")
class SomeDirectiveWithGetterOutputs {
@Output("renamed")
get a() {
return null;
}
@ -108,7 +108,7 @@ export function main() {
var directiveMetadata = resolver.resolve(SomeDirective);
expect(directiveMetadata)
.toEqual(new DirectiveMetadata(
{selector: 'someDirective', properties: [], events: [], host: {}, queries: {}}));
{selector: 'someDirective', inputs: [], outputs: [], host: {}, queries: {}}));
});
it('should throw if not matching metadata is found', () => {
@ -120,30 +120,30 @@ export function main() {
var directiveMetadata = resolver.resolve(SomeChildDirective);
expect(directiveMetadata)
.toEqual(new DirectiveMetadata(
{selector: 'someChildDirective', properties: [], events: [], host: {}, queries: {}}));
{selector: 'someChildDirective', inputs: [], outputs: [], host: {}, queries: {}}));
});
describe('properties', () => {
it('should append directive properties', () => {
describe('inputs', () => {
it('should append directive inputs', () => {
var directiveMetadata = resolver.resolve(SomeDirectiveWithProperties);
expect(directiveMetadata.properties).toEqual(['c', 'a', 'b: renamed']);
expect(directiveMetadata.inputs).toEqual(['c', 'a', 'b: renamed']);
});
it('should work with getters and setters', () => {
var directiveMetadata = resolver.resolve(SomeDirectiveWithSetterProps);
expect(directiveMetadata.properties).toEqual(['a: renamed']);
expect(directiveMetadata.inputs).toEqual(['a: renamed']);
});
});
describe('events', () => {
it('should append directive events', () => {
var directiveMetadata = resolver.resolve(SomeDirectiveWithEvents);
expect(directiveMetadata.events).toEqual(['c', 'a', 'b: renamed']);
describe('outputs', () => {
it('should append directive outputs', () => {
var directiveMetadata = resolver.resolve(SomeDirectiveWithOutputs);
expect(directiveMetadata.outputs).toEqual(['c', 'a', 'b: renamed']);
});
it('should work with getters and setters', () => {
var directiveMetadata = resolver.resolve(SomeDirectiveWithGetterEvents);
expect(directiveMetadata.events).toEqual(['a: renamed']);
var directiveMetadata = resolver.resolve(SomeDirectiveWithGetterOutputs);
expect(directiveMetadata.outputs).toEqual(['a: renamed']);
});
});

View File

@ -345,7 +345,7 @@ export function main() {
describe('event emitters', () => {
it('should return a list of event accessors', () => {
var binding = DirectiveBinding.createFromType(HasEventEmitter,
new DirectiveMetadata({events: ['emitter']}));
new DirectiveMetadata({outputs: ['emitter']}));
var inj = createPei(null, 0, [binding]);
expect(inj.eventEmitterAccessors.length).toEqual(1);
@ -357,7 +357,7 @@ export function main() {
it('should allow a different event vs field name', () => {
var binding = DirectiveBinding.createFromType(HasEventEmitter,
new DirectiveMetadata({events: ['emitter: publicEmitter']}));
new DirectiveMetadata({outputs: ['emitter: publicEmitter']}));
var inj = createPei(null, 0, [binding]);
expect(inj.eventEmitterAccessors.length).toEqual(1);

View File

@ -266,7 +266,7 @@ class NoPropertyAccess {
@Component(
selector: 'on-change',
properties: const ['prop'])
inputs: const ['prop'])
@View(template: '')
class OnChangeComponent implements OnChanges {
Map changes;
@ -281,7 +281,7 @@ class OnChangeComponent implements OnChanges {
@Component(
selector: 'component-with-observable-list',
changeDetection: ChangeDetectionStrategy.OnPush,
properties: const ['list'],
inputs: const ['list'],
bindings: const [
const Binding(IterableDiffers,
toValue: const IterableDiffers(const [

View File

@ -75,8 +75,8 @@ import {
Attribute,
Query,
Pipe,
Property,
Event,
Input,
Output,
HostBinding,
HostListener
} from 'angular2/src/core/metadata';
@ -1733,25 +1733,25 @@ class DynamicViewport {
}
}
@Directive({selector: '[my-dir]', properties: ['dirProp: elprop'], exportAs: 'mydir'})
@Directive({selector: '[my-dir]', inputs: ['dirProp: elprop'], exportAs: 'mydir'})
@Injectable()
class MyDir {
dirProp: string;
constructor() { this.dirProp = ''; }
}
@Directive({selector: '[title]', properties: ['title']})
@Directive({selector: '[title]', inputs: ['title']})
class DirectiveWithTitle {
title: string;
}
@Directive({selector: '[title]', properties: ['title'], host: {'[title]': 'title'}})
@Directive({selector: '[title]', inputs: ['title'], host: {'[title]': 'title'}})
class DirectiveWithTitleAndHostProperty {
title: string;
}
@Component(
{selector: 'push-cmp', properties: ['prop'], changeDetection: ChangeDetectionStrategy.OnPush})
{selector: 'push-cmp', inputs: ['prop'], changeDetection: ChangeDetectionStrategy.OnPush})
@View({template: '{{field}}'})
@Injectable()
class PushCmp {
@ -1768,7 +1768,7 @@ class PushCmp {
@Component({
selector: 'push-cmp-with-ref',
properties: ['prop'],
inputs: ['prop'],
changeDetection: ChangeDetectionStrategy.OnPush
})
@View({template: '{{field}}'})
@ -1828,7 +1828,7 @@ class MyComp {
throwError() { throw 'boom'; }
}
@Component({selector: 'child-cmp', properties: ['dirProp'], viewBindings: [MyService]})
@Component({selector: 'child-cmp', inputs: ['dirProp'], viewBindings: [MyService]})
@View({directives: [MyDir], template: '{{ctxProp}}'})
@Injectable()
class ChildComp {
@ -1896,7 +1896,7 @@ class DoublePipe implements PipeTransform {
transform(value, args = null) { return `${value}${value}`; }
}
@Directive({selector: '[emitter]', events: ['event']})
@Directive({selector: '[emitter]', outputs: ['event']})
@Injectable()
class DirectiveEmitingEvent {
msg: string;
@ -1985,7 +1985,7 @@ class DirectiveListeningDomEventNoPrevent {
onEvent(event) { return true; }
}
@Directive({selector: '[id]', properties: ['id']})
@Directive({selector: '[id]', inputs: ['id']})
@Injectable()
class IdDir {
id: string;
@ -2031,7 +2031,7 @@ class ToolbarPart {
constructor(templateRef: TemplateRef) { this.templateRef = templateRef; }
}
@Directive({selector: '[toolbar-vc]', properties: ['toolbarVc']})
@Directive({selector: '[toolbar-vc]', inputs: ['toolbarVc']})
@Injectable()
class ToolbarViewContainer {
vc: ViewContainerRef;
@ -2059,7 +2059,7 @@ class ToolbarComponent {
}
}
@Directive({selector: '[two-way]', properties: ['value: control'], events: ['control']})
@Directive({selector: '[two-way]', inputs: ['value: control'], outputs: ['control']})
@Injectable()
class DirectiveWithTwoWayBinding {
control: EventEmitter;
@ -2199,7 +2199,7 @@ class ChildConsumingEventBus {
constructor(@SkipSelf() bus: EventBus) { this.bus = bus; }
}
@Directive({selector: '[some-impvp]', properties: ['someImpvp']})
@Directive({selector: '[some-impvp]', inputs: ['someImpvp']})
@Injectable()
class SomeImperativeViewport {
view: ViewRef;
@ -2256,8 +2256,8 @@ class DirectiveThrowingAnError {
class DirectiveWithPropDecorators {
target;
@Property("elProp") dirProp: string;
@Event('elEvent') event = new EventEmitter();
@Input("elProp") dirProp: string;
@Output('elEvent') event = new EventEmitter();
@HostBinding("attr.my-attr") myAttr: string;
@HostListener("click", ["$event.target"])

View File

@ -470,7 +470,7 @@ class MainComp {
text: string = '';
}
@Component({selector: 'simple', properties: ['stringProp']})
@Component({selector: 'simple', inputs: ['stringProp']})
@View({template: 'SIMPLE(<ng-content></ng-content>)', directives: []})
class Simple {
stringProp: string = '';
@ -570,7 +570,7 @@ class ConditionalTextComponent {
class Tab {
}
@Component({selector: 'tree', properties: ['depth']})
@Component({selector: 'tree', inputs: ['depth']})
@View({
template: 'TREE({{depth}}:<tree *manual [depth]="depth+1"></tree>)',
directives: [ManualViewportDirective, Tree]

View File

@ -672,7 +672,7 @@ export function main() {
});
}
@Directive({selector: '[text]', properties: ['text'], exportAs: 'textDir'})
@Directive({selector: '[text]', inputs: ['text'], exportAs: 'textDir'})
@Injectable()
class TextDirective {
text: string;

View File

@ -36,7 +36,7 @@ class Logger {
add(thing: string) { this.log.push(thing); }
}
@Directive({selector: '[message]', properties: ['message']})
@Directive({selector: '[message]', inputs: ['message']})
@Injectable()
class MessageDir {
logger: Logger;
@ -76,7 +76,7 @@ class ParentComp {
constructor() { this.parentBinding = 'OriginalParent'; }
}
@Directive({selector: 'custom-emitter', events: ['myevent']})
@Directive({selector: 'custom-emitter', outputs: ['myevent']})
@Injectable()
class CustomEmitter {
myevent: EventEmitter;

View File

@ -62,7 +62,7 @@ class LifecycleDir implements DoCheck {
doCheck() { this._log.add("child_doCheck"); }
}
@Component({selector: "[lifecycle]", properties: ['field']})
@Component({selector: "[lifecycle]", inputs: ['field']})
@View({template: `<div lifecycle-dir></div>`, directives: [LifecycleDir]})
class LifecycleCmp implements OnChanges, OnInit, DoCheck, AfterContentInit, AfterContentChecked,
AfterViewInit, AfterViewChecked {

View File

@ -216,11 +216,8 @@ var decoratorWithMultipleAttrs = RenderDirectiveMetadata.create({
type: RenderDirectiveMetadata.DIRECTIVE_TYPE
});
var someDirectiveWithProps = RenderDirectiveMetadata.create({
selector: '[some-decor-props]',
properties: ['dirProp: elProp'],
readAttributes: ['some-attr']
});
var someDirectiveWithProps = RenderDirectiveMetadata.create(
{selector: '[some-decor-props]', inputs: ['dirProp: elProp'], readAttributes: ['some-attr']});
var someDirectiveWithHostProperties = RenderDirectiveMetadata.create({
selector: '[some-decor-with-host-props]',

View File

@ -156,11 +156,11 @@ var NG_API = [
'Component.bindings',
'Component.changeDetection',
'Component.compileChildren',
'Component.events',
'Component.outputs',
'Component.exportAs',
'Component.host',
'Component.moduleId',
'Component.properties',
'Component.inputs',
'Component.queries',
'Component.selector',
'Component.viewBindings',
@ -168,11 +168,11 @@ var NG_API = [
'ComponentMetadata.bindings',
'ComponentMetadata.changeDetection',
'ComponentMetadata.compileChildren',
'ComponentMetadata.events',
'ComponentMetadata.outputs',
'ComponentMetadata.exportAs',
'ComponentMetadata.host',
'ComponentMetadata.moduleId',
'ComponentMetadata.properties',
'ComponentMetadata.inputs',
'ComponentMetadata.queries',
'ComponentMetadata.selector',
'ComponentMetadata.viewBindings',
@ -373,21 +373,21 @@ var NG_API = [
'Directive',
'Directive.bindings',
'Directive.compileChildren',
'Directive.events',
'Directive.outputs',
'Directive.exportAs',
'Directive.host',
'Directive.moduleId',
'Directive.properties',
'Directive.inputs',
'Directive.queries',
'Directive.selector',
'DirectiveMetadata',
'DirectiveMetadata.bindings',
'DirectiveMetadata.compileChildren',
'DirectiveMetadata.events',
'DirectiveMetadata.outputs',
'DirectiveMetadata.exportAs',
'DirectiveMetadata.host',
'DirectiveMetadata.moduleId',
'DirectiveMetadata.properties',
'DirectiveMetadata.inputs',
'DirectiveMetadata.queries',
'DirectiveMetadata.selector',
'DirectiveResolver',
@ -407,8 +407,8 @@ var NG_API = [
'ElementRef.renderBoundElementIndex=',
'ElementRef.renderView',
'ElementRef.renderView=',
'Event',
'Event.bindingPropertyName',
'Output',
'Output.bindingPropertyName',
'EventEmitter',
'EventEmitter.add():dart',
'EventEmitter.addError():dart',
@ -454,8 +454,8 @@ var NG_API = [
'EventEmitter.toSet():dart',
'EventEmitter.transform():dart',
'EventEmitter.where():dart',
'EventMetadata',
'EventMetadata.bindingPropertyName',
'OutputMetadata',
'OutputMetadata.bindingPropertyName',
'ExpressionChangedAfterItHasBeenCheckedException',
'ExpressionChangedAfterItHasBeenCheckedException.message',
'ExpressionChangedAfterItHasBeenCheckedException.stackTrace',
@ -790,10 +790,10 @@ var NG_API = [
'PlatformRef.dispose()',
'PlatformRef.injector',
'Predicate:dart',
'Property',
'Property.bindingPropertyName',
'PropertyMetadata',
'PropertyMetadata.bindingPropertyName',
'Input',
'Input.bindingPropertyName',
'InputMetadata',
'InputMetadata.bindingPropertyName',
'ProtoViewRef',
'Query',
'Query.descendants',
@ -866,8 +866,8 @@ var NG_API = [
'RenderDirectiveMetadata.changeDetection=',
'RenderDirectiveMetadata.compileChildren',
'RenderDirectiveMetadata.compileChildren=',
'RenderDirectiveMetadata.events',
'RenderDirectiveMetadata.events=',
'RenderDirectiveMetadata.outputs',
'RenderDirectiveMetadata.outputs=',
'RenderDirectiveMetadata.exportAs',
'RenderDirectiveMetadata.exportAs=',
'RenderDirectiveMetadata.hostAttributes',
@ -878,8 +878,8 @@ var NG_API = [
'RenderDirectiveMetadata.hostProperties=',
'RenderDirectiveMetadata.id',
'RenderDirectiveMetadata.id=',
'RenderDirectiveMetadata.properties',
'RenderDirectiveMetadata.properties=',
'RenderDirectiveMetadata.inputs',
'RenderDirectiveMetadata.inputs=',
'RenderDirectiveMetadata.queries',
'RenderDirectiveMetadata.queries=',
'RenderDirectiveMetadata.readAttributes',

View File

@ -49,7 +49,7 @@ export class MdButton {
@Component({
selector: 'a[md-button], a[md-raised-button], a[md-fab]',
properties: ['disabled'],
inputs: ['disabled'],
host: {
'(click)': 'onClick($event)',
'(mousedown)': 'onMousedown()',

View File

@ -6,7 +6,7 @@ import {NumberWrapper} from 'angular2/src/core/facade/lang';
@Component({
selector: 'md-checkbox',
properties: ['checked', 'disabled'],
inputs: ['checked', 'disabled'],
host: {
'role': 'checkbox',
'[attr.aria-checked]': 'checked',

View File

@ -27,7 +27,7 @@ class RowHeightMode {
}
@Component({selector: 'md-grid-list', properties: ['cols', 'rowHeight', 'gutterSize']})
@Component({selector: 'md-grid-list', inputs: ['cols', 'rowHeight', 'gutterSize']})
@View({
templateUrl: 'package:angular2_material/src/components/grid_list/grid_list.html',
encapsulation: ViewEncapsulation.None
@ -214,7 +214,7 @@ export class MdGridList implements AfterContentChecked {
@Component({
selector: 'md-grid-tile',
properties: ['rowspan', 'colspan'],
inputs: ['rowspan', 'colspan'],
host: {
'role': 'listitem',
'[style.height]': 'style.height',

View File

@ -65,7 +65,7 @@ export class MdInputContainer implements AfterContentChecked {
@Directive({
selector: 'md-input-container input',
events: ['mdChange', 'mdFocusChange'],
outputs: ['mdChange', 'mdFocusChange'],
host: {
'class': 'md-input',
'(input)': 'updateValue($event)',

View File

@ -21,7 +21,7 @@ class ProgressMode {
@Component({
selector: 'md-progress-linear',
properties: ['value', 'bufferValue'],
inputs: ['value', 'bufferValue'],
host: {
'role': 'progressbar',
'aria-valuemin': '0',

View File

@ -35,8 +35,8 @@ var _uniqueIdCounter: number = 0;
@Component({
selector: 'md-radio-group',
events: ['change'],
properties: ['disabled', 'value'],
outputs: ['change'],
inputs: ['disabled', 'value'],
host: {
'role': 'radiogroup',
'[attr.aria-disabled]': 'disabled',
@ -192,7 +192,7 @@ export class MdRadioGroup implements OnChanges {
@Component({
selector: 'md-radio-button',
properties: ['id', 'name', 'value', 'checked', 'disabled'],
inputs: ['id', 'name', 'value', 'checked', 'disabled'],
host: {
'role': 'radio',
'[id]': 'id',

View File

@ -6,7 +6,7 @@ import {MdCheckbox} from "../checkbox/checkbox";
@Component({
selector: 'md-switch',
properties: ['checked', 'disabled'],
inputs: ['checked', 'disabled'],
host: {
'role': 'checkbox',
'[attr.aria-checked]': 'checked',

View File

@ -109,26 +109,26 @@ class CompilerAppComponent {
}
}
@Directive({selector: '[dir0]', properties: ['prop: attr0']})
@Directive({selector: '[dir0]', inputs: ['prop: attr0']})
class Dir0 {
}
@Directive({selector: '[dir1]', properties: ['prop: attr1']})
@Directive({selector: '[dir1]', inputs: ['prop: attr1']})
class Dir1 {
constructor(dir0: Dir0) {}
}
@Directive({selector: '[dir2]', properties: ['prop: attr2']})
@Directive({selector: '[dir2]', inputs: ['prop: attr2']})
class Dir2 {
constructor(dir1: Dir1) {}
}
@Directive({selector: '[dir3]', properties: ['prop: attr3']})
@Directive({selector: '[dir3]', inputs: ['prop: attr3']})
class Dir3 {
constructor(dir2: Dir2) {}
}
@Directive({selector: '[dir4]', properties: ['prop: attr4']})
@Directive({selector: '[dir4]', inputs: ['prop: attr4']})
class Dir4 {
constructor(dir3: Dir3) {}
}

View File

@ -219,7 +219,7 @@ class CellData {
iFn() { return this.i; }
}
@Component({selector: 'largetable', properties: ['data', 'benchmarkType']})
@Component({selector: 'largetable', inputs: ['data', 'benchmarkType']})
@View({
directives: [NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault],
template: `

View File

@ -12,19 +12,19 @@ export class HasStyle {
set width(w: number) { this.cellWidth = w; }
}
@Component({selector: 'company-name', properties: ['width: cell-width', 'company']})
@Component({selector: 'company-name', inputs: ['width: cell-width', 'company']})
@View({directives: [], template: `<div [style.width.px]="cellWidth">{{company.name}}</div>`})
export class CompanyNameComponent extends HasStyle {
company: Company;
}
@Component({selector: 'opportunity-name', properties: ['width: cell-width', 'opportunity']})
@Component({selector: 'opportunity-name', inputs: ['width: cell-width', 'opportunity']})
@View({directives: [], template: `<div [style.width.px]="cellWidth">{{opportunity.name}}</div>`})
export class OpportunityNameComponent extends HasStyle {
opportunity: Opportunity;
}
@Component({selector: 'offering-name', properties: ['width: cell-width', 'offering']})
@Component({selector: 'offering-name', inputs: ['width: cell-width', 'offering']})
@View({directives: [], template: `<div [style.width.px]="cellWidth">{{offering.name}}</div>`})
export class OfferingNameComponent extends HasStyle {
offering: Offering;
@ -37,7 +37,7 @@ export class Stage {
apply: Function;
}
@Component({selector: 'stage-buttons', properties: ['width: cell-width', 'offering']})
@Component({selector: 'stage-buttons', inputs: ['width: cell-width', 'offering']})
@View({
directives: [NgFor],
template: `
@ -82,7 +82,7 @@ export class StageButtonsComponent extends HasStyle {
}
}
@Component({selector: 'account-cell', properties: ['width: cell-width', 'account']})
@Component({selector: 'account-cell', inputs: ['width: cell-width', 'account']})
@View({
directives: [],
template: `
@ -96,7 +96,7 @@ export class AccountCellComponent extends HasStyle {
account: Account;
}
@Component({selector: 'formatted-cell', properties: ['width: cell-width', 'value']})
@Component({selector: 'formatted-cell', inputs: ['width: cell-width', 'value']})
@View({directives: [], template: `<div [style.width.px]="cellWidth">{{formattedValue}}</div>`})
export class FormattedCellComponent extends HasStyle {
formattedValue: string;

View File

@ -25,7 +25,7 @@ import {
AAT_STATUS_WIDTH
} from './common';
@Component({selector: 'scroll-item', properties: ['offering']})
@Component({selector: 'scroll-item', inputs: ['offering']})
@View({
directives: [
CompanyNameComponent,

View File

@ -226,12 +226,12 @@ class StaticTreeComponentBase {
get data() { return this._value; }
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({directives: [], template: '<span>{{data.value}} </span>'})
class StaticTreeComponent0 extends StaticTreeComponentBase {
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent0],
template:
@ -240,7 +240,7 @@ class StaticTreeComponent0 extends StaticTreeComponentBase {
class StaticTreeComponent1 extends StaticTreeComponentBase {
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent1],
template:
@ -250,7 +250,7 @@ class StaticTreeComponent2 extends StaticTreeComponentBase {
data: TreeNode;
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent2],
template:
@ -259,7 +259,7 @@ class StaticTreeComponent2 extends StaticTreeComponentBase {
class StaticTreeComponent3 extends StaticTreeComponentBase {
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent3],
template:
@ -268,7 +268,7 @@ class StaticTreeComponent3 extends StaticTreeComponentBase {
class StaticTreeComponent4 extends StaticTreeComponentBase {
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent4],
template:
@ -277,7 +277,7 @@ class StaticTreeComponent4 extends StaticTreeComponentBase {
class StaticTreeComponent5 extends StaticTreeComponentBase {
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent5],
template:
@ -286,7 +286,7 @@ class StaticTreeComponent5 extends StaticTreeComponentBase {
class StaticTreeComponent6 extends StaticTreeComponentBase {
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent6],
template:
@ -295,7 +295,7 @@ class StaticTreeComponent6 extends StaticTreeComponentBase {
class StaticTreeComponent7 extends StaticTreeComponentBase {
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent7],
template:
@ -304,7 +304,7 @@ class StaticTreeComponent7 extends StaticTreeComponentBase {
class StaticTreeComponent8 extends StaticTreeComponentBase {
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [StaticTreeComponent8],
template:

View File

@ -218,7 +218,7 @@ class BaseLineIf {
}
}
@Component({selector: 'tree', properties: ['data']})
@Component({selector: 'tree', inputs: ['data']})
@View({
directives: [TreeComponent, NgIf],
template:

View File

@ -67,7 +67,7 @@ class DemoApp {
@Component({
selector: 'simple-dialog',
properties: ['numCoconuts'],
inputs: ['numCoconuts'],
})
@View({
encapsulation: ViewEncapsulation.None,

View File

@ -41,7 +41,7 @@ function creditCardValidator(c): StringMap<string, boolean> {
* actual error message.
* To make it simple, we are using a simple map here.
*/
@Component({selector: 'show-error', properties: ['controlPath: control', 'errorTypes: errors']})
@Component({selector: 'show-error', inputs: ['controlPath: control', 'errorTypes: errors']})
@View({
template: `
<span *ng-if="errorMessage !== null">{{errorMessage}}</span>

View File

@ -16,7 +16,7 @@ class HasStyle {
}
@Component(
selector: "company-name",
properties: const ["width: cell-width", "company"],
inputs: const ["width: cell-width", "company"],
changeDetection: ChangeDetectionStrategy.OnPushObserve
)
@View(
@ -28,7 +28,7 @@ class CompanyNameComponent extends HasStyle {
}
@Component(
selector: "opportunity-name",
properties: const ["width: cell-width", "opportunity"],
inputs: const ["width: cell-width", "opportunity"],
changeDetection: ChangeDetectionStrategy.OnPushObserve
)
@View(
@ -40,7 +40,7 @@ class OpportunityNameComponent extends HasStyle {
}
@Component(
selector: "offering-name",
properties: const ["width: cell-width", "offering"],
inputs: const ["width: cell-width", "offering"],
changeDetection: ChangeDetectionStrategy.OnPushObserve
)
@View(
@ -58,7 +58,7 @@ class Stage {
}
@Component(
selector: "stage-buttons",
properties: const ["width: cell-width", "offering"],
inputs: const ["width: cell-width", "offering"],
changeDetection: ChangeDetectionStrategy.OnPushObserve
)
@View(directives: const [NgFor], template: '''
@ -102,7 +102,7 @@ class StageButtonsComponent extends HasStyle {
}
@Component(
selector: "account-cell",
properties: const ["width: cell-width", "account"],
inputs: const ["width: cell-width", "account"],
changeDetection: ChangeDetectionStrategy.OnPushObserve
)
@View(directives: const [], template: '''
@ -116,7 +116,7 @@ class AccountCellComponent extends HasStyle {
}
@Component(
selector: "formatted-cell",
properties: const ["width: cell-width", "value"],
inputs: const ["width: cell-width", "value"],
changeDetection: ChangeDetectionStrategy.OnPushObserve
)
@View(

View File

@ -25,7 +25,7 @@ import "common.dart"
END_DATE_WIDTH,
AAT_STATUS_WIDTH;
@Component(selector: "scroll-item", properties: const ["offering"],
@Component(selector: "scroll-item", inputs: const ["offering"],
changeDetection: ChangeDetectionStrategy.OnPushObserve)
@View(
directives: const [

View File

@ -116,7 +116,7 @@ class OrderListComponent {
}
@Component({selector: 'order-item-cmp', properties: ['item'], events: ['delete']})
@Component({selector: 'order-item-cmp', inputs: ['item'], outputs: ['delete']})
@View({
template: `
<div>

View File

@ -65,7 +65,7 @@ class CreditCardValidator {
* actual error message.
* To make it simple, we are using a simple map here.
*/
@Component({selector: 'show-error', properties: ['controlPath: control', 'errorTypes: errors']})
@Component({selector: 'show-error', inputs: ['controlPath: control', 'errorTypes: errors']})
@View({
template: `
<span *ng-if="errorMessage !== null">{{errorMessage}}</span>

View File

@ -1,11 +1,8 @@
import {Component, View, EventEmitter} from 'angular2/angular2';
import {ObservableWrapper} from 'angular2/src/core/facade/async';
@Component({
selector: 'zippy',
properties: ['title'],
events: ['openHandler: open', 'closeHandler: close']
})
@Component(
{selector: 'zippy', inputs: ['title'], outputs: ['openHandler: open', 'closeHandler: close']})
@View({templateUrl: 'zippy.html'})
export class Zippy {
visible: boolean = true;

View File

@ -105,7 +105,7 @@ class Component extends Directive {
injectables = injectables,
super(
selector: selector,
properties: properties,
inputs: properties,
events: events,
hostListeners: hostListeners,
lifecycle: lifecycle);

View File

@ -123,7 +123,7 @@ List<String> _generateSetters(Map<String, String> bindMap) {
/// the bind properties and the values are either the one and only type
/// binding to that property or the empty string.
Map<String, String> _createPropertiesMap(NgDeps ngDeps) {
var visitor = new ExtractNamedExpressionVisitor('properties');
var visitor = new ExtractNamedExpressionVisitor('inputs');
var bindMap = {};
ngDeps.registeredTypes.forEach((RegisteredType t) {
visitor.bindConfig.clear();
@ -167,7 +167,7 @@ List<String> _generateGetters(List<String> eventProperties) {
/// Collapses all `events` in {@link ngDeps} into a list of corresponding
/// property names.
List<String> _createEventPropertiesList(NgDeps ngDeps) {
var visitor = new ExtractNamedExpressionVisitor('events');
var visitor = new ExtractNamedExpressionVisitor('outputs');
var propertyNames = [];
ngDeps.registeredTypes.forEach((RegisteredType t) {
visitor.bindConfig.clear();

View File

@ -19,7 +19,7 @@ Map<String, dynamic> directiveMetadataToMap(RenderDirectiveMetadata meta) {
["hostProperties", _cloneIfPresent(meta.hostProperties)],
["hostListeners", _cloneIfPresent(meta.hostListeners)],
["hostAttributes", _cloneIfPresent(meta.hostAttributes)],
["properties", _cloneIfPresent(meta.properties)],
["inputs", _cloneIfPresent(meta.inputs)],
["readAttributes", _cloneIfPresent(meta.readAttributes)],
["type", meta.type],
["exportAs", meta.exportAs],
@ -31,7 +31,7 @@ Map<String, dynamic> directiveMetadataToMap(RenderDirectiveMetadata meta) {
["callAfterContentChecked", meta.callAfterContentChecked],
["callAfterViewInit", meta.callAfterViewInit],
["callAfterViewChecked", meta.callAfterViewChecked],
["events", meta.events],
["outputs", meta.outputs],
["changeDetection", meta.changeDetection == null ? null : meta.changeDetection.index],
["version", 1]
]);
@ -52,7 +52,7 @@ RenderDirectiveMetadata directiveMetadataFromMap(Map<String, dynamic> map) {
map["hostListeners"]) as Map<String, String>),
hostAttributes: (_cloneIfPresent(
map["hostAttributes"]) as Map<String, String>),
properties: (_cloneIfPresent(map["properties"]) as List<String>),
inputs: (_cloneIfPresent(map["inputs"]) as List<String>),
readAttributes: (_cloneIfPresent(map["readAttributes"]) as List<String>),
type: (map["type"] as num),
exportAs: (map["exportAs"] as String),
@ -64,7 +64,7 @@ RenderDirectiveMetadata directiveMetadataFromMap(Map<String, dynamic> map) {
callAfterContentChecked: (map["callAfterContentChecked"] as bool),
callAfterViewInit: (map["callAfterViewInit"] as bool),
callAfterViewChecked: (map["callAfterViewChecked"] as bool),
events: (_cloneIfPresent(map["events"]) as List<String>),
outputs: (_cloneIfPresent(map["outputs"]) as List<String>),
changeDetection: map["changeDetection"] == null ? null
: ChangeDetectionStrategy.values[map["changeDetection"] as int]);
}

View File

@ -132,7 +132,7 @@ class _DirectiveMetadataVisitor extends Object
num _type;
String _selector;
bool _compileChildren;
List<String> _properties;
List<String> _inputs;
Map<String, String> _host;
List<String> _readAttributes;
String _exportAs;
@ -145,7 +145,7 @@ class _DirectiveMetadataVisitor extends Object
bool _callAfterViewInit;
bool _callAfterViewChecked;
ChangeDetectionStrategy _changeDetection;
List<String> _events;
List<String> _outputs;
final ConstantEvaluator _evaluator = new ConstantEvaluator();
@ -155,7 +155,7 @@ class _DirectiveMetadataVisitor extends Object
_type = directiveType;
_selector = '';
_compileChildren = true;
_properties = [];
_inputs = [];
_host = {};
_readAttributes = [];
_exportAs = null;
@ -168,14 +168,14 @@ class _DirectiveMetadataVisitor extends Object
_callAfterViewInit = false;
_callAfterViewChecked = false;
_changeDetection = null;
_events = [];
_outputs = [];
}
RenderDirectiveMetadata get meta => RenderDirectiveMetadata.create(
type: _type,
selector: _selector,
compileChildren: _compileChildren,
properties: _properties,
inputs: _inputs,
host: _host,
readAttributes: _readAttributes,
exportAs: _exportAs,
@ -188,7 +188,7 @@ class _DirectiveMetadataVisitor extends Object
callAfterViewInit: _callAfterViewInit,
callAfterViewChecked: _callAfterViewChecked,
changeDetection: _changeDetection,
events: _events);
outputs: _outputs);
@override
Object visitAnnotation(Annotation node) {
@ -223,7 +223,7 @@ class _DirectiveMetadataVisitor extends Object
case 'compileChildren':
_populateCompileChildren(node.expression);
break;
case 'properties':
case 'inputs':
_populateProperties(node.expression);
break;
case 'host':
@ -235,7 +235,7 @@ class _DirectiveMetadataVisitor extends Object
case 'changeDetection':
_populateChangeDetection(node.expression);
break;
case 'events':
case 'outputs':
_populateEvents(node.expression);
break;
}
@ -312,7 +312,7 @@ class _DirectiveMetadataVisitor extends Object
void _populateProperties(Expression propertiesValue) {
_checkMeta();
_populateList(propertiesValue, _properties, 'Directive#properties');
_populateList(propertiesValue, _inputs, 'Directive#properties');
}
void _populateHost(Expression hostValue) {
@ -342,7 +342,7 @@ class _DirectiveMetadataVisitor extends Object
void _populateEvents(Expression eventsValue) {
_checkMeta();
_populateList(eventsValue, _events, 'Directive#events');
_populateList(eventsValue, _outputs, 'Directive#events');
}
void _populateChangeDetection(Expression value) {

View File

@ -32,8 +32,8 @@ class Processor implements CodegenModel {
void _processViewDefinition(ViewDefinitionEntry viewDefEntry) {
// These are necessary even with generated change detectors.
if (viewDefEntry.hostMetadata != null &&
viewDefEntry.hostMetadata.events != null) {
viewDefEntry.hostMetadata.events.forEach((eventName) {
viewDefEntry.hostMetadata.outputs != null) {
viewDefEntry.hostMetadata.outputs.forEach((eventName) {
getterNames.add(
new ReflectiveAccessor(eventName, isStaticallyNecessary: true));
});

View File

@ -12,6 +12,6 @@ void initReflector(reflector) {
ToolTip,
new ReflectionInfo(const [
const Directive(
selector: '[tool-tip]', properties: const ['text: tool-tip'])
selector: '[tool-tip]', inputs: const ['text: tool-tip'])
], const [], () => new ToolTip()));
}

View File

@ -12,7 +12,7 @@ void initReflector(reflector) {
ToolTip,
new ReflectionInfo(const [
const Directive(
selector: '[tool-tip]', properties: const ['text: tool-tip'])
selector: '[tool-tip]', inputs: const ['text: tool-tip'])
], const [], () => new ToolTip()))
..registerSetters({'text': (o, v) => o.text = v});
}

View File

@ -13,12 +13,12 @@ void initReflector(reflector) {
new ReflectionInfo(const [
const Component(
componentServices: const [SaladComponent],
properties: const ['menu'])
inputs: const ['menu'])
], const [], () => new SoupComponent()))
..registerType(
SaladComponent,
new ReflectionInfo(const [
const Component(properties: const ['menu'])
const Component(inputs: const ['menu'])
], const [], () => new SaladComponent()))
..registerSetters({'menu': (o, v) => o.menu = v});
}

View File

@ -13,11 +13,11 @@ void initReflector(reflector) {
new ReflectionInfo(const [
const Component(
componentServices: const [SaladComponent],
properties: const ['menu'])
inputs: const ['menu'])
], const [], () => new SoupComponent()))
..registerType(
SaladComponent,
new ReflectionInfo(const [
const Component(properties: const ['menu'])
const Component(inputs: const ['menu'])
], const [], () => new SaladComponent()));
}

View File

@ -13,6 +13,6 @@ void initReflector(reflector) {
new ReflectionInfo(const [
const Directive(
selector: '[tool-tip]',
events: const ['onOpen', 'close: onClose'])
outputs: const ['onOpen', 'close: onClose'])
], const [], () => new ToolTip()));
}

View File

@ -13,7 +13,7 @@ void initReflector(reflector) {
new ReflectionInfo(const [
const Directive(
selector: '[tool-tip]',
events: const ['onOpen', 'close: onClose'])
outputs: const ['onOpen', 'close: onClose'])
], const [], () => new ToolTip()))
..registerGetters({'onOpen': (o) => o.onOpen, 'close': (o) => o.close});
}

View File

@ -23,7 +23,7 @@ main() {
["AtKey", "AtVal"]
]),
id: "someComponent",
properties: ["propKey: propVal"],
inputs: ["propKey: propVal"],
readAttributes: ["read1", "read2"],
selector: "some-comp",
type: RenderDirectiveMetadata.COMPONENT_TYPE,
@ -36,7 +36,7 @@ main() {
callAfterContentChecked: true,
callAfterViewInit: true,
callAfterViewChecked: true,
events: ["onFoo", "onBar"],
outputs: ["onFoo", "onBar"],
changeDetection: ChangeDetectionStrategy.CheckOnce);
var map = directiveMetadataToMap(someComponent);
expect(map["compileChildren"]).toEqual(false);
@ -50,7 +50,7 @@ main() {
["AtKey", "AtVal"]
]));
expect(map["id"]).toEqual("someComponent");
expect(map["properties"]).toEqual(["propKey: propVal"]);
expect(map["inputs"]).toEqual(["propKey: propVal"]);
expect(map["readAttributes"]).toEqual(["read1", "read2"]);
expect(map["selector"]).toEqual("some-comp");
expect(map["type"]).toEqual(RenderDirectiveMetadata.COMPONENT_TYPE);
@ -63,7 +63,7 @@ main() {
expect(map["callAfterViewInit"]).toEqual(true);
expect(map["callAfterViewChecked"]).toEqual(true);
expect(map["exportAs"]).toEqual("aaa");
expect(map["events"]).toEqual(["onFoo", "onBar"]);
expect(map["outputs"]).toEqual(["onFoo", "onBar"]);
expect(map["changeDetection"])
.toEqual(ChangeDetectionStrategy.CheckOnce.index);
});
@ -90,7 +90,7 @@ main() {
],
["id", "testId"],
[
"properties",
"inputs",
["propKey: propVal"]
],
[
@ -109,7 +109,7 @@ main() {
["callAfterViewInit", true],
["callAfterViewChecked", true],
[
"events",
"outputs",
["onFoo", "onBar"]
],
["changeDetection", ChangeDetectionStrategy.CheckOnce.index]
@ -126,7 +126,7 @@ main() {
["AtKey", "testVal"]
]));
expect(meta.id).toEqual("testId");
expect(meta.properties).toEqual(["propKey: propVal"]);
expect(meta.inputs).toEqual(["propKey: propVal"]);
expect(meta.readAttributes).toEqual(["readTest1", "readTest2"]);
expect(meta.selector).toEqual("testSelector");
expect(meta.type).toEqual(RenderDirectiveMetadata.DIRECTIVE_TYPE);
@ -139,7 +139,7 @@ main() {
expect(meta.callAfterContentChecked).toEqual(true);
expect(meta.callAfterViewInit).toEqual(true);
expect(meta.callAfterViewChecked).toEqual(true);
expect(meta.events).toEqual(["onFoo", "onBar"]);
expect(meta.outputs).toEqual(["onFoo", "onBar"]);
expect(meta.changeDetection).toEqual(ChangeDetectionStrategy.CheckOnce);
});
});

View File

@ -65,13 +65,13 @@ void allTests() {
expect(trueComp.compileChildren).toBeTrue();
});
it('should parse properties.', () async {
it('should parse inputs.', () async {
var metadata = await readMetadata('directive_metadata_extractor/'
'directive_metadata_files/properties.ng_deps.dart');
expect(metadata.properties).toBeNotNull();
expect(metadata.properties.length).toBe(2);
expect(metadata.properties).toContain('key1: val1');
expect(metadata.properties).toContain('key2: val2');
expect(metadata.inputs).toBeNotNull();
expect(metadata.inputs.length).toBe(2);
expect(metadata.inputs).toContain('key1: val1');
expect(metadata.inputs).toContain('key2: val2');
});
it('should parse exportAs.', () async {
@ -112,10 +112,10 @@ void allTests() {
expect(metadata.callAfterViewChecked).toBe(true);
});
it('should parse events.', () async {
it('should parse outputs.', () async {
var metadata = await readMetadata('directive_metadata_extractor/'
'directive_metadata_files/events.ng_deps.dart');
expect(metadata.events).toEqual(['onFoo', 'onBar']);
expect(metadata.outputs).toEqual(['onFoo', 'onBar']);
});
it('should parse changeDetection.', () async {

View File

@ -12,7 +12,7 @@ void initReflector(reflector) {
..registerType(
HelloCmp,
new ReflectionInfo(const [
const Component(events: const ['onFoo', 'onBar'])
const Component(outputs: const ['onFoo', 'onBar'])
], const [
const []
], () => new HelloCmp()));

View File

@ -12,7 +12,7 @@ void initReflector(reflector) {
..registerType(
HelloCmp,
new ReflectionInfo(const [
const Component(properties: const ['key1: val1', 'key2: val2'])
const Component(inputs: const ['key1: val1', 'key2: val2'])
], const [
const []
], () => new HelloCmp()));

View File

@ -8,7 +8,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": [],
"type": 1,
"exportAs": null,
@ -20,7 +20,7 @@
"callAfterContentChecked": false,
"callAfterViewInit": false,
"callAfterViewChecked": false,
"events": [],
"outputs": [],
"changeDetection": null,
"version": 1
}

View File

@ -8,7 +8,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": null,
"inputs": null,
"readAttributes": null,
"type": null,
"exportAs": null,
@ -20,7 +20,7 @@
"callAfterContentChecked": null,
"callAfterViewInit": null,
"callAfterViewChecked": null,
"events": ["dependencyEventName"],
"outputs": ["dependencyEventName"],
"changeDetection": null,
"version": 1
}
@ -34,7 +34,7 @@
"hostProperties": {"hprop": "hprop"},
"hostListeners": {},
"hostAttributes": {},
"properties": ["prop"],
"inputs": ["prop"],
"readAttributes": null,
"type": null,
"exportAs": null,
@ -46,7 +46,7 @@
"callAfterContentChecked": null,
"callAfterViewInit": null,
"callAfterViewChecked": null,
"events": null,
"outpus": null,
"changeDetection": null,
"version": 1
}
@ -60,7 +60,7 @@
"hostProperties": {},
"hostListeners": {"subevent": "doAThing()"},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": null,
"type": null,
"exportAs": null,
@ -72,7 +72,7 @@
"callAfterContentChecked": null,
"callAfterViewInit": null,
"callAfterViewChecked": null,
"events": null,
"outputs": null,
"changeDetection": null,
"version": 1
}
@ -86,7 +86,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": ["ngForOf"],
"inputs": ["ngForOf"],
"readAttributes": null,
"type": null,
"exportAs": null,
@ -98,7 +98,7 @@
"callAfterContentChecked": null,
"callAfterViewInit": null,
"callAfterViewChecked": null,
"events": null,
"outputs": null,
"changeDetection": null,
"version": 1
}

View File

@ -30,7 +30,7 @@ void initReflector(reflector) {
..registerType(
EventsCmp,
new ReflectionInfo(const [
const Component(selector: 'events', events: const ['eventName']),
const Component(selector: 'events', outputs: const ['eventName']),
const View(template: 'Hi')
], const [
const []

View File

@ -30,7 +30,7 @@ void initReflector(reflector) {
..registerType(
EventsCmp,
new ReflectionInfo(const [
const Component(selector: 'events', events: const ['eventName']),
const Component(selector: 'events', outputs: const ['eventName']),
const View(template: 'Hi')
], const [
const []

View File

@ -8,7 +8,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": null,
"inputs": null,
"readAttributes": null,
"type": null,
"exportAs": null,
@ -20,7 +20,7 @@
"callAfterContentChecked": null,
"callAfterViewInit": null,
"callAfterViewChecked": null,
"events": null,
"outputs": null,
"changeDetection": null,
"version": 1
}
@ -34,7 +34,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": [],
"type": 0,
"exportAs": null,
@ -46,7 +46,7 @@
"callAfterContentChecked": false,
"callAfterViewInit": false,
"callAfterViewChecked": false,
"events": [],
"outputs": [],
"changeDetection": null,
"version": 1
}
@ -55,12 +55,12 @@
"kind": "type",
"value": {
"id": "EventsCmp",
"selector": "events",
"selector": "outputs",
"compileChildren": true,
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": [],
"type": 1,
"exportAs": null,
@ -72,7 +72,7 @@
"callAfterContentChecked": false,
"callAfterViewInit": false,
"callAfterViewChecked": false,
"events": ["eventName"],
"outputs": ["eventName"],
"changeDetection": null,
"version": 1
}
@ -81,12 +81,12 @@
"kind": "type",
"value": {
"id": "SubEventsCmp",
"selector": "events",
"selector": "outputs",
"compileChildren": true,
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": [],
"type": 1,
"exportAs": null,
@ -98,7 +98,7 @@
"callAfterContentChecked": false,
"callAfterViewInit": false,
"callAfterViewChecked": false,
"events": [],
"outputs": [],
"changeDetection": null,
"version": 1
}
@ -112,7 +112,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": [],
"type": 1,
"exportAs": null,
@ -124,7 +124,7 @@
"callAfterContentChecked": false,
"callAfterViewInit": false,
"callAfterViewChecked": false,
"events": [],
"outputs": [],
"changeDetection": null,
"version": 1
}
@ -138,7 +138,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": [],
"type": 1,
"exportAs": null,
@ -150,7 +150,7 @@
"callAfterContentChecked": false,
"callAfterViewInit": false,
"callAfterViewChecked": false,
"events": [],
"outputs": [],
"changeDetection": null,
"version": 1
}
@ -164,7 +164,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": [],
"type": 1,
"exportAs": null,
@ -176,7 +176,7 @@
"callAfterContentChecked": false,
"callAfterViewInit": false,
"callAfterViewChecked": false,
"events": [],
"outputs": [],
"changeDetection": null,
"version": 1
}
@ -190,7 +190,7 @@
"hostProperties": {},
"hostListeners": {},
"hostAttributes": {},
"properties": [],
"inputs": [],
"readAttributes": [],
"type": 1,
"exportAs": null,
@ -202,7 +202,7 @@
"callAfterContentChecked": false,
"callAfterViewInit": false,
"callAfterViewChecked": false,
"events": [],
"outputs": [],
"changeDetection": null,
"version": 1
}