Extending the template compiler
Template Compiler Hooks
Registering Compilation Hooks
import { templateCompilerHooks, ITemplateCompilerHooks } from 'aurelia';
@templateCompilerHooks
class MyCompilerHook implements ITemplateCompilerHooks {
compiling(template: HTMLElement): void {
// Modify template before compilation
this.addDefaultAttributes(template);
this.injectDevelopmentHelpers(template);
}
private addDefaultAttributes(template: HTMLElement): void {
// Add default attributes to form elements
template.querySelectorAll('input[type="text"]').forEach(input => {
if (!input.hasAttribute('autocomplete')) {
input.setAttribute('autocomplete', 'off');
}
});
}
private injectDevelopmentHelpers(template: HTMLElement): void {
if (__DEV__) {
// Add development-only attributes
template.querySelectorAll('[data-dev-hint]').forEach(el => {
el.setAttribute('title', el.getAttribute('data-dev-hint')!);
});
}
}
}Global vs Component-Level Hooks
Advanced Attribute Pattern System
Creating Custom Attribute Syntax
Complex Pattern Matching
Custom Binding Commands
Advanced Binding Command Features
Multi-Attribute Processing
Template Element Factory Customization
Custom Template Caching
Template Wrapping Detection
Advanced Resource Resolution
Custom Resource Discovery
Bindables Information Caching
Local Template System
Advanced Local Element Definitions
Dynamic Local Template Creation
Compilation Context System
Hierarchical Resource Resolution
Custom Dependency Injection
Performance Optimization
Template Compilation Caching
Compilation Mode Optimization
Best Practices
1. Hook Registration
2. Pattern and Command Design
3. Resource Resolution
4. Performance Considerations
5. Testing Extensions
Last updated
Was this helpful?