Globals
In Aurelia 2, templates are designed to limit direct access to global variables like window
or document
for security reasons. However, there are scenarios where access to certain global variables is necessary. Aurelia allows access to a predefined list of global variables commonly used in development.
To reduce boilerplate, Aurelia allows template expression to access a fixed list of global variables that are usually needed. Those globals are as follows:
Infinity
NaN
isFinite
isNaN
parseFloat
parseInt
decodeURI
decodeURIComponent
encodeURI
encodeURIComponent
Array
BigInt
Boolean
Date
Map
Number
Object
RegExp
Set
String
JSON
Math
Intl
Global Examples
Here are some examples of using globals inside of Aurelia templates. The usage is the same as it is inside of Javascript, except in your Aurelia templates.
Working with JSON
Manipulate JSON data directly in your templates.
<template>
<pre>${JSON.stringify(user, null, 2)}</pre>
</template>
Mathematical Operations
Perform calculations using the Math object.
<template>
<p>The square root of 16 is ${Math.sqrt(16)}</p>
</template>
Conditional Rendering with isNaN
isNaN
Display content conditionally based on numeric checks.
<template>
<p if.bind="isNaN(value)">Not a number</p>
</template>
Regular Expressions with RegExp
RegExp
Use the RegExp
constructor to create dynamic regular expressions for data validation or manipulation.
<template>
<input value.bind="email" type="email" placeholder="Enter email">
<p if.bind="new RegExp('^\\S+@\\S+\\.\\S+$').test(email)">Valid Email Address</p>
</template>
Dynamic Object Property Access with Object
Object
Access properties dynamically on an object using the Object
constructor.
<template>
<p>Property Value: ${Object.getOwnPropertyDescriptor(user, selectedProperty)?.value}</p>
</template>
Set Operations with Set
Set
Demonstrate set operations like union, intersection, or difference.
<template>
<p>Unique Numbers: ${[...new Set(numbersArray)]}</p>
</template>
Encoding and Decoding URLs with encodeURI
and decodeURI
encodeURI
and decodeURI
Manipulate URL strings by encoding or decoding them.
<template>
<a href.bind="encodeURI(externalLink)">Visit External Site</a>
<p>Original URL: ${decodeURI(externalLink)}</p>
</template>
Number Formatting with Intl.NumberFormat
Intl.NumberFormat
Format numbers using Intl.NumberFormat for localization.
<template>
<p>${new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(price)}</p>
</template>
Complex Array Manipulations with Array
Array
Demonstrate complex array manipulations, such as chaining methods.
<template>
<p>Processed Data: ${Array.from(dataSet).filter(x => x.isActive).map(x => x.value).join(', ')}</p>
</template>
Best Practices and Considerations
Use Sparingly: Rely on global variables only when necessary. Prefer component properties and methods for data and logic.
Security: Be cautious of the data processed using global functions to prevent XSS attacks and other vulnerabilities.
Performance: Frequent use of complex operations like JSON.stringify in templates can impact performance. Consider handling such operations in the component class.
Reactivity: Remember that changes to global variables are not reactive. If you need reactivity, use component properties or state management solutions.
Last updated
Was this helpful?