【发布时间】:2015-10-12 17:53:58
【问题描述】:
在我的 AngularJS 应用程序中,我有两个工厂,名为“editInfo”和“pinVerify”。我想要做的是让editInfo工厂使用像pinVerify.sendPin(this.saveInfo)这样的回调函数调用pinVerify服务,然后将该方法保存在pinVerify工厂中,以便用户输入pin并按下调用@987654322的按钮@
这样做的问题是回调方法将被复制到 pinVerify 对象中,并且无法引用 editInfo 工厂中的属性。
所以...自然我尝试在 pinVerify 工厂中使用$q.defer() 代替,并在用户输入通过 SMS 发送的 pin 时在 pinVerify.pinEntered() 中解决它。
这工作得很好,我可以在 editInfo 工厂中这样做而不是使用回调:
pinVerify.sendPin().then(function() {
this.saveInfo();
}
saveInfo 方法将检测 pin 是否正确并隐藏模式以输入它。当引脚不正确时会出现问题。
promise 已经解决了,所以再次点击调用pinVerify.pinEntered 的按钮基本上什么都不会做。我无法解决它两次。
所以现在我有点回到我开始的地方,并认真考虑在工作时大量饮酒......
对于如何在两个工厂之间完成这种关系有什么建议吗?我猜对好啤酒/伏特加酒的建议也很有效。
【问题讨论】:
-
如果不了解此模式的工作原理,很难提供帮助。并查看更多代码。听起来
$q.all(promise1,promise2)可能会有所帮助....或者只是扔掉那个瓶子上的盖子 -
$q.all 对我没有帮助,因为
pinVerify.pinEntered可以被无限次调用,而输入引脚的实际验证是在其他工厂完成的editInfo -
这是使用 angular-ui 模态吗?并且您在验证之前过早关闭了模式?
-
不,它只是一个带有 ng-show 的 div,直到 editInfo 的
this.saveInfo();函数确定 pin 是否正确后才会关闭。我现在正在考虑使用调用self.saveInfo()的闭包方法来代替 - 看看这是否可行。在我的场景中,一个 $q 承诺似乎越来越不可能起作用。
标签: javascript angularjs angularjs-service