2015-07-22 3 views
-1

В моем приложении AngularJS у меня есть две фабрики, называемые «editInfo» и «pinVerify». То, что я пытаюсь сделать, это заставить фабрику editInfo вызвать службу pinVerify с функцией обратного вызова, например, pinVerify.sendPin(this.saveInfo), а затем сохранить этот метод внутри фабрики pinVerify, когда пользователь ввел этот вывод и нажал кнопку, вызывающую pinVerify.pinEntered()Как я могу использовать обратные вызовы между двумя фабриками AngularJS?

Проблема заключается в том, что метод обратного вызова будет скопирован в объект pinVerify и не сможет ссылаться на свойства на фабрике editInfo.

Итак ... я попытался использовать $q.defer() внутри фабрики pinVerify и разрешить его в pinVerify.pinEntered(), когда пользователь вводит контакт, отправленный по SMS.

Это отлично работает, и я могу внутри завода editInfo сделать это вместо того, чтобы с помощью обратных вызовов:

pinVerify.sendPin().then(function() { 
    this.saveInfo(); 
} 

И метод saveInfo обнаружит, если штифт был правильно и скрыть модальность, чтобы войти в него. Проблема возникает, когда контакт неверен.

Обещание уже разрешено, поэтому другой щелчок на кнопке, вызывающей pinVerify.pinEntered, ничего не будет делать в принципе. Я не могу разрешить это дважды.

Так что теперь я вроде туда, где я начал, и серьезно рассматривает пьянства во время работы ...

Любые предложения о том, как я могу выполнить этот вид отношений между двумя заводами? Предложения по хорошему пиву/водки тоже работают.

+0

Трудно помочь, не понимая, как это работает. и видят больше кода. Звучит как случай, когда '$ q.all (обещание1, обещание2)' может помочь ... или просто выбросить колпачок на эту бутылку – charlietfl

+0

$ q.all не поможет мне, так как 'pinVerify.pinEntered' можно вызвать бесконечное количество раз и фактическая проверка введенного вывода выполняется на другом заводе 'editInfo' –

+0

Используется ли это с помощью углового-ui-модального? И вы преждевременно закрываете модальность перед валидацией? – charlietfl

ответ

0

Хотя моя первая попытка, прежде чем даже идти в $ д обещание выглядело так и не получилось - pinVerify.sendPin(self.saveAddress);

я только сейчас решил это сам с помощью закрывающего-метода в качестве обратного вызова, а затем внутри него вызвав фактический метод с использованием ранее объявленного var self = this;

pinVerify.sendPin(function() { 
    self.saveAddress(); 
}); 
Смежные вопросы