angularjscachingangularjs-injector

How to destroy injected service in angularjs cache?


We all know that in AngularJS service are singletons. Since then when you do this $injector.get('foo') you will get an instance of this service and its constructor would be invoked + object would be added into injector's cache for the reason because it is the singleton.

Anyway, are there any methods that I can utilize for removing service in that cache for re-creating service again? Using factory solves this but anyway.


Solution

  • To reset a service, you can expose a function that invoke the service again.

    PLUNKER

    Service

    app.service('MyService', MyService);
    
    function MyService () {
      console.log('init service #' + Date.now());
    
      this.reset = () => {
        MyService();
      }
    }
    

    Then you can use it everywhere like

    var myService = $injector.get('MyService');
    myService.reset();
    

    With ES6 classes you can do something like this:

    class MyService {
    
      constructor() {
        console.log('init service #' + Date.now());
    
        this.reset = () => {
          new MyService();
        }
      }
    }