Créer un service dans app/services
app/services/shopping-cart.js
import Service from '@ember/service';
import { tracked } from 'glimmer/tracking';
export default class ShoppingCartService extends Service {
@tracked itemList = [];
addItem(item) {
this.itemList = [...this.itemList, item];
}
}
Injecter le service avec le décorateur @inject (souvent renommé @service)
app/controllers/cart.js:
import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
export default class CartController extends Controller {
@service shoppingCart;
}
app/components/cart-icon.js:
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
export default class CartIconComponent extends Component {
@service shoppingCart;
}
On peut créer une propriété sous un nom différent que celui du service:
@service('shopping-cart') cart;
Les services sont injectés en lazy loading: l’instance ne sera créée que quand la propriété est explicitement appelée. Une fois instancié, le service persiste jusqu’à ce l’application soit fermée.
Utiliser le service.
{{#each this.shoppingCart.itemList as |item|}}
<h4>{{item.name}}</h4>
{{/each}}