Services

Créer un service

  1. 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];
       }
     }
    
  2. 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.

  3. Utiliser le service.

     {{#each this.shoppingCart.itemList as |item|}}
       <h4>{{item.name}}</h4>
     {{/each}}