feat(core): expose inputs, outputs and ngContentSelectors on ComponentFactory. (#15214)

E.g. for a component like this:
```
@Component({
  template: ‘<ng-content select=“child”></ng-content>’
})
class MyComp {
  @Input(‘aInputName’)
  aInputProp: string;

  @Output(‘aEventName’)
  aOuputProp: EventEmitter<any>;
}
```

the `ComponentFactory` will now contain the following:
- `inputs = {aInputProp: ‘aInputName’}`
- `outputs = {aOutputProp: ‘aOutputName’}`
- `ngContentSelectors = [‘child’]`
This commit is contained in:
Tobias Bosch
2017-03-14 14:54:36 -07:00
committed by Miško Hevery
parent 604546c287
commit 791534f2f4
9 changed files with 132 additions and 11 deletions

View File

@ -73,6 +73,8 @@ export class Compiler {
* the template of the given component.
* This is used by the `upgrade` library to compile the appropriate transclude content
* in the AngularJS wrapper component.
*
* @deprecated since v4. Use ComponentFactory.ngContentSelectors instead.
*/
getNgContentSelectors(component: Type<any>): string[] { throw _throwError(); }

View File

@ -70,6 +70,18 @@ export abstract class ComponentRef<C> {
export abstract class ComponentFactory<C> {
abstract get selector(): string;
abstract get componentType(): Type<any>;
/**
* selector for all <ng-content> elements in the component.
*/
abstract get ngContentSelectors(): string[];
/**
* the inputs of the component.
*/
abstract get inputs(): {propName: string, templateName: string}[];
/**
* the outputs of the component.
*/
abstract get outputs(): {propName: string, templateName: string}[];
/**
* Creates a new component.
*/

View File

@ -65,6 +65,9 @@ export class ComponentFactoryBoundToModule<C> extends ComponentFactory<C> {
get selector() { return this.factory.selector; }
get componentType() { return this.factory.componentType; }
get ngContentSelectors() { return this.factory.ngContentSelectors; }
get inputs() { return this.factory.inputs; }
get outputs() { return this.factory.outputs; }
create(
injector: Injector, projectableNodes?: any[][], rootSelectorOrNode?: string|any,