2013-05-21 2 views
2

В первом примере кода все работает как должно - при каждом изменении страницы маршрута мы проверяем некоторые условия ($timeout) и разрешить обещание:AngularJS: маршрут решительность обещание кэшированные

JSFiddle Var sample code

Во втором образце мы переходим к var rulesFactoryapp.factory('rulesFactory') и теперь он работает один раз:

JSFiddle App Factory sample code

ли кэш? Как решить эту проблему, чтобы улучшить повторяемость кода?

+2

если вы используете фабрику в виде строки в решимости он будет называться только один раз HTTPS: //groups.google.com/forum/#!msg/angular/QtO8QoxSjYw/SWxea0tOBGYJ –

ответ

7

Код в вашем rulesFactory был только когда-либо запущен один раз - при первом запуске службы.

Он делает это на разрешения в первый раз:

  1. Угловая видит, что ищет что-то впрыснуть под названием «rulesFactory»
  2. Угловая находит сервис под названием rulesFactory. Он видит, что никто еще не использовал rulesFactory и не создает службу.
  3. rulesFactory служба конкретизируется, и $ таймаут запускается с обещанием возвращается

Он делает это на решить во второй раз:

  1. Угловая видит, что ищет "rulesFactory. rulesFactory уже существует!
  2. Угловой просто получает существующий объект для rulesFactory.
  3. Тайм-аут уже закончился раньше, и будут использоваться те же уже разрешенные обещания.

Исправить это, чтобы правилаFactory возвращали функцию, которая будет запускать таймаут снова - каждый раз, когда вы этого хотите.

И, кроме того, сами по себе $ таймаута возвращает обещание, так что вы можете просто вернуть $ таймаута :-)

http://jsfiddle.net/JbTkp/4/

+1

Спасибо, потратил день, пытаясь решить эту проблему. – FelikZ

 Смежные вопросы

  • Нет связанных вопросов^_^