Simple template helper to inject services into templates
Simple template helper to inject services into templates.
ember install ember-service-helper
There are two ways to invoke the {{service}}
helper.
{{service serviceName}}
— Returns the service itself.owner.lookup(`service:${serviceName}`)
{{service serviceName methodName}}
— Returns the method, bound to the instance.Example using the built-in {{get}}
helper andember-responsive
. Note that{{get}}
returns a bound reference.
{{#if (get (service "breakpoints") "isDesktop")}}
Desktop breakpoint
{{else}}
Mobile breakpoint
{{/if}}
Example using ember-set-helper
.
<ColorPicker @update={{set (service "preferences") "favoriteColor"}}>
Example using the{{pick}}
helper from ember-composable-helpers
to get the event.target.checked
property.
<label>
Enable dark mode
<input
type="checkbox"
checked={{get (service "theme") "isDark"}}
{{on "input" (pick "target.checked" (service "theme" "toggleDarkMode"))}}
>
</label>
export default class ThemeService extends Service {
@tracked isDark = false;
toggleDarkMode(newValue = !this.isDark) {
// Even though this method isn't using `@action`, the `{{service}}` helper
// binds it to the service instance.
this.isDark = newValue;
}
}