diff --git a/apps/angular/10-utility-wrapper-pipe/src/app/app.component.ts b/apps/angular/10-utility-wrapper-pipe/src/app/app.component.ts
index 764d4b9d0..8d6775e2b 100644
--- a/apps/angular/10-utility-wrapper-pipe/src/app/app.component.ts
+++ b/apps/angular/10-utility-wrapper-pipe/src/app/app.component.ts
@@ -1,17 +1,19 @@
import { NgFor } from '@angular/common';
import { Component } from '@angular/core';
import { PersonUtils } from './person.utils';
+import { UtilPipe } from './util.pipe';
@Component({
- imports: [NgFor],
+ standalone: true,
+ imports: [NgFor, UtilPipe],
selector: 'app-root',
template: `
{{ activity.name }} :
- {{ showName(person.name, index) }}
- {{ isAllowed(person.age, isFirst, activity.minimumAge) }}
+ {{ 'showName' | util: person.name : index }}
+ {{ 'isAllowed' | util: person.age : isFirst : activity.minimumAge }}
`,
diff --git a/apps/angular/10-utility-wrapper-pipe/src/app/util.pipe.ts b/apps/angular/10-utility-wrapper-pipe/src/app/util.pipe.ts
new file mode 100644
index 000000000..25a29065f
--- /dev/null
+++ b/apps/angular/10-utility-wrapper-pipe/src/app/util.pipe.ts
@@ -0,0 +1,19 @@
+import { Pipe, PipeTransform } from '@angular/core';
+import { PersonUtils } from './person.utils';
+
+type PersonType = typeof PersonUtils;
+
+@Pipe({
+ name: 'util',
+ standalone: true,
+})
+export class UtilPipe implements PipeTransform {
+ transform(
+ utilityName: T,
+ ...args: Parameters
+ ): ReturnType {
+ const fn = PersonUtils[utilityName];
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ return (fn as Function)(...args);
+ }
+}