diff --git a/docs/generated/packages/angular/generators/component.json b/docs/generated/packages/angular/generators/component.json index be266a909d550..4811775a85849 100644 --- a/docs/generated/packages/angular/generators/component.json +++ b/docs/generated/packages/angular/generators/component.json @@ -105,6 +105,11 @@ "default": false, "x-priority": "important" }, + "exportDefault": { + "type": "boolean", + "default": false, + "description": "Use default export for the component instead of a named export." + }, "skipFormat": { "description": "Skip formatting files.", "type": "boolean", diff --git a/packages/angular/src/generators/component/component.spec.ts b/packages/angular/src/generators/component/component.spec.ts index 144a6c93199de..f3311f0fca0a3 100644 --- a/packages/angular/src/generators/component/component.spec.ts +++ b/packages/angular/src/generators/component/component.spec.ts @@ -55,6 +55,25 @@ describe('component Generator', () => { ); }); + it('should export the component as default when exportDefault is true', async () => { + const tree = createTreeWithEmptyWorkspace({}); + addProjectConfiguration(tree, 'lib1', { + projectType: 'library', + sourceRoot: 'libs/lib1/src', + root: 'libs/lib1', + }); + tree.write('libs/lib1/src/index.ts', ''); + + await componentGenerator(tree, { + path: 'libs/lib1/src/lib/example/example', + exportDefault: true, + }); + + expect( + tree.read('libs/lib1/src/lib/example/example.component.ts', 'utf-8') + ).toContain('export default class ExampleComponent {}'); + }); + it('should not generate test file when --skip-tests=true', async () => { // ARRANGE const tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); diff --git a/packages/angular/src/generators/component/component.ts b/packages/angular/src/generators/component/component.ts index e4a720d889411..e6fac9df0c281 100644 --- a/packages/angular/src/generators/component/component.ts +++ b/packages/angular/src/generators/component/component.ts @@ -22,6 +22,7 @@ export async function componentGenerator(tree: Tree, rawOptions: Schema) { name: options.name, fileName: options.fileName, symbolName: options.symbolName, + exportDefault: options.exportDefault, style: options.style, inlineStyle: options.inlineStyle, inlineTemplate: options.inlineTemplate, diff --git a/packages/angular/src/generators/component/files/__fileName__.ts__tpl__ b/packages/angular/src/generators/component/files/__fileName__.ts__tpl__ index b165d4c2d5090..a634911867036 100644 --- a/packages/angular/src/generators/component/files/__fileName__.ts__tpl__ +++ b/packages/angular/src/generators/component/files/__fileName__.ts__tpl__ @@ -16,4 +16,4 @@ import { CommonModule } from '@angular/common';<% } %> encapsulation: ViewEncapsulation.<%= viewEncapsulation %><% } if (changeDetection !== 'Default') { %>, changeDetection: ChangeDetectionStrategy.<%= changeDetection %><% } %> }) -export class <%= symbolName %> {} +export <% if (exportDefault) {%>default <%}%>class <%= symbolName %> {} diff --git a/packages/angular/src/generators/component/schema.d.ts b/packages/angular/src/generators/component/schema.d.ts index 9715b06394431..3bf698fe10157 100644 --- a/packages/angular/src/generators/component/schema.d.ts +++ b/packages/angular/src/generators/component/schema.d.ts @@ -15,6 +15,7 @@ export interface Schema { module?: string; skipSelector?: boolean; export?: boolean; + exportDefault?: boolean; prefix?: string; skipFormat?: boolean; } diff --git a/packages/angular/src/generators/component/schema.json b/packages/angular/src/generators/component/schema.json index a66a47c47870e..dc69cfb28acd5 100644 --- a/packages/angular/src/generators/component/schema.json +++ b/packages/angular/src/generators/component/schema.json @@ -105,6 +105,11 @@ "default": false, "x-priority": "important" }, + "exportDefault": { + "type": "boolean", + "default": false, + "description": "Use default export for the component instead of a named export." + }, "skipFormat": { "description": "Skip formatting files.", "type": "boolean",