Как уничтожить внедренный сервис в кеш angularjs?

Мы все знаем, что в AngularJS service синглтоны. С тех пор, когда вы делаете это $injector.get('foo') вы получите экземпляр этого сервиса и его конструктор будет вызван + объект будет добавлен в кеш инжектора по причине, потому что это синглтон.

Во всяком случае, есть ли какие-либо методы, которые я могу использовать для удаления службы в этом кэше для повторного создания службы? С помощью factory решает это но все равно.

1 ответ

Решение

Чтобы сбросить службу, вы можете выставить функцию, которая снова вызывает службу.

PLUNKER

обслуживание

app.service('MyService', MyService);

function MyService () {
  console.log('init service #' + Date.now());

  this.reset = () => {
    MyService();
  }
}

Тогда вы можете использовать его везде, как

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

С классами ES6 вы можете сделать что-то вроде этого:

class MyService {

  constructor() {
    console.log('init service #' + Date.now());

    this.reset = () => {
      new MyService();
    }
  }
}
Другие вопросы по тегам