with.bind (scope binding)
Change the binding context for a section of a template using Aurelia's built-in with template controller.
with is a template controller that creates a new binding scope for its content. It’s useful when you want to “zoom in” on an object so you don’t have to repeat a prefix like user. everywhere.
Basic usage
<template with.bind="user">
<h2>${firstName} ${lastName}</h2>
<p>${email}</p>
</template>The inner template’s binding context becomes user, so firstName resolves as user.firstName, etc.
You can also put with.bind on a real element:
<section with.bind="user">
<h2>${firstName} ${lastName}</h2>
</section>“Shape” a small context object
Sometimes you don’t want to pass the whole object through — just a few values (or renamed values):
<template with.bind="{ profile: user.profile, canEdit: permissions.admin }">
<user-profile profile.bind="profile"></user-profile>
<button disabled.bind="!canEdit">Edit</button>
</template>Updates and lifecycle
withdoes not add/remove DOM likeiforrepeat.When the
withvalue changes, Aurelia re-binds the existing view to the new scope (it does not recreate the view).
Gotchas
withexpects an object. If your value can benull/undefined, guard it:Prefer
<let>when you only need a couple of local aliases and don’t need to re-scope a whole block.
Last updated
Was this helpful?