Installations
npm install ngx-function-expression
Developer Guide
Typescript
No
Module System
ESM
Node Version
18.14.2
NPM Version
9.5.0
Score
57
Supply Chain
87.3
Quality
77.6
Maintenance
100
Vulnerability
98.9
License
Releases
Unable to fetch releases
Contributors
Unable to fetch Contributors
Languages
TypeScript (84.92%)
JavaScript (15.08%)
Developer
nrauschcom
Download Statistics
Total Downloads
32,029
Last Day
1
Last Week
69
Last Month
302
Last Year
5,892
GitHub Statistics
6 Stars
51 Commits
1 Forks
3 Branches
1 Contributors
Package Meta Information
Latest Version
17.0.1
Package Id
ngx-function-expression@17.0.1
Unpacked Size
45.68 kB
Size
13.13 kB
File Count
21
NPM Version
9.5.0
Node Version
18.14.2
Publised On
20 May 2024
Total Downloads
Cumulative downloads
Total Downloads
32,029
Last day
-93.8%
1
Compared to previous day
Last week
1.5%
69
Compared to previous week
Last month
-20.7%
302
Compared to previous month
Last year
17.4%
5,892
Compared to previous year
Daily Downloads
Weekly Downloads
Monthly Downloads
Yearly Downloads
Dependencies
1
Peer Dependencies
2
Performant Pure Function Calls in Angular Templates
Warning: For Angular Versions < 13, please use ngx-function-expression@^2.0.0, because the package is Ivy-only as of Dec 2021.
Using Functions in Angular Templates is a double-edged sword.
While you can significantly reduce your template code by putting logic in component methods, this idea comes with its own pitfalls: Because you can't mark a method as pure, Angular will keep calling that method in every change detection cycle, waiting for the outputs to change, resulting in a huge amount of function calls.
By using ngx-function-expression, you are allowing Angular to memoize the result of your function calls as long as the parameters don't change.
This library comes with the following benefits:
- Component-scoped method calls with the correct "this" context
- Simple usage with any kind of methods and parameters
- Type-safe template usage
Examples
Applying Component Methods in the Template
1@Component({ 2 template: '{{pow | fnApply:[3, 2]}}' // will render '9' 3}) 4class TestComponent { 5 public pow(base: number, exponent: number): number { 6 return Math.pow(base, exponent); 7 } 8}
Obviously, this could also be achieved by implementing a PowerPipe or precalculating the values in the component rather than in the template, and, most of the time, this is exactly what you should do!
But in reality, people will not write a pipe for every operation, or some methods are better contained in a component to access the context of that component.
Dynamically Creating a Stream of Data
As with any Angular pipe, you can chain them together to receive exactly the results you want.
1@Component({ 2 template: `Explosion in {{createCountdown | fnApply | async}}` 3}) 4class TestComponent { 5 createCountdown(): Observable<number> { 6 return interval(1000).pipe(take(5), map(i => 5 - i)); 7 } 8}
When looking at this example, note that using {{createCountdown() | async}}
would result in the AsyncPipe
subscribing to a whole new observable in every tick, keeping the countdown on 5 forever.
Using fnApply will call the method exactly once and then listen to changes on the returned observable using AsyncPipe.
Just imagine you have some XHR request or costly computations in the observable you're subscribing to...
You can check out more examples and the full README over at GitHub
Get Started!
- Run
npm install ngx-function-expression
- Add the
FunctionExpressionModule
to your application and use the pipesfnApply
andfnMethod
in your templates.
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
license file detected
Details
- Info: project has a license file: LICENSE:0
- Info: FSF or OSI recognized license: MIT License: LICENSE:0
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
Found 0/30 approved changesets -- score normalized to 0
Reason
no SAST tool detected
Details
- Warn: no pull requests merged into dev branch
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
- Warn: no security policy file detected
- Warn: no security file to analyze
- Warn: no security file to analyze
- Warn: no security file to analyze
Reason
project is not fuzzed
Details
- Warn: no fuzzer integrations found
Reason
branch protection not enabled on development/release branches
Details
- Warn: branch protection not enabled for branch 'main'
Reason
23 existing vulnerabilities detected
Details
- Warn: Project is vulnerable to: GHSA-c75v-2vq8-878f
- Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7
- Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg
- Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x
- Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275
- Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx
- Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc
- Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp
- Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27
- Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv
- Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55
- Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j
- Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w
- Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6
- Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm
- Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw
- Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg
- Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p
- Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3
- Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986 / GHSA-64vr-g452-qvp3
- Warn: Project is vulnerable to: GHSA-9cwx-2883-4wfx
- Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q
- Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc
Score
1.7
/10
Last Scanned on 2024-12-16
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More