Attribute binding
Attribute binding in Aurelia is a powerful feature that allows you to bind to any native HTML attribute in your templates. This enables dynamic updates to element attributes such as classes, styles, and other standard HTML attributes.
Basic Binding Syntax
The basic syntax for binding to attributes in Aurelia is straightforward:
<div attribute-name.bind="value"></div>attribute-name.bind="value"is a bindingattribute-nameis the target of the bindingbindis the command of the bindingvalueis the expression of the binding
You can bind to almost any attribute listed in the comprehensive HTML attributes list, found here.
Binding Techniques and Syntax
Aurelia provides multiple methods for attribute binding, each with its syntax and use cases.
Interpolation Binding
Interpolation allows for embedding dynamic values within strings. Here's an example using interpolation to bind the id attribute:
<div>
<h1 id="${headingId}">My Heading</h1>
</div>Keyword Binding
Aurelia supports several binding keywords, each defining the data flow between the view model and the view:
one-time: Updates the view from the view model once and does not reflect subsequent changes.to-view/one-way: Continuously updates the view from the view model.from-view: Updates the view model based on changes in the view.two-way: Creates a two-way data flow, keeping the view and view model in sync.bind: Automatically determines the appropriate binding mode, defaulting totwo-wayfor form elements andto-viewfor most other elements.
Examples of Keyword Binding
Binding to Images
Binding image attributes, such as src and alt, is as simple as:
Disabling Elements
Bind to the disabled attribute to disable buttons and inputs dynamically:
InnerHtml and TextContent
Choose between innerhtml for rendering HTML content and textcontent for text-only content:
Advanced Binding Techniques
How Attribute Binding Works
Aurelia uses a mapping function to convert properties to HTML attributes. The attribute mapper handles the conversion, typically changing kebab-case to camelCase. However, not all properties map directly to attributes.
Using the .attr Tag
.attr TagIf automatic mapping fails, use .attr to ensure proper attribute binding:
Attribute Binding Behavior
Apply the attribute binding behavior with .bind and & attr to specify the binding type:
Note on the syntaxes.
Expression syntax
One way to understand the varieties of the binding syntaxes, or why we have both binding command and interpolation, is to look at the JS counterpart via the following example:
All the above examples of building
fullNamefromfirstNameandlastNamearrive at the same result, but there are at least three ways! This illustrates that sometimes, depending on the preference, one can choose one over another, and the framework should have the flexibility to reflect JavaScript language.Attribute targeting syntax
Another confusing point is the availability of both
.bindand.attrsyntaxes. One may ask why we need both.Consider the following example of setting the
idattribute on an<input>element:Either setting the id via
idproperty or callingsetAttribute('id', ...)on the<input>gives the same outcome, but we have two ways! This is partly because of preference one may have and the fact that Aurelia works with properties, and not all properties reflect their attribute counterparts. For example, when doing:the
my-custom-attr.bind="someValue"will be translated into a binding that updates the propertymyCustomAttron the<input>, based on the value ofsomeValue. But the html doesn't reflect thismyCustomAttrproperty whenever it changes. If we want to have the<input>HTML to reflect that, we need to call theinput.setAttribute('my-custom-attr'). Consider.attris a simpler way of doing this.
Remember, interpolation and keyword binding achieve similar results, and there should be no noticeable difference in performance or features. Choose the syntax based on your preference and your project's specific requirements.
Last updated
Was this helpful?