AngularJS:Service变量更改未应用
问题:AngularJS:服务变量的更改不起作用
原因:在调用服务(工厂)返回的值的地方,添加一个$watch。这将在服务中的值更改时更新该值。
解决方法:
$scope.$watch(function() { return ModalService.getInfo(); }, function(){ $scope.info = ModalService.getInfo(); });
参考解决方案:查看解决方案
问题的出现的原因是返回的对象中的isSignedIn
变量的值始终保持为false,不会随后面对isSignedIn
变量值的更改而更新。解决方法是将isSignedIn
变量的值通过一个函数暴露给外部,使用return { isSignedIn: function () { return isSignedIn; } }
来返回对象。
在问题的更新代码中,{{skypeClient.state()}}
的绑定并没有更新(除非有其他操作“强制”更新它)。这可能是因为该值的更新发生在Angular的digest周期之外,所以没有告诉Angular在正确的时机更新。可以尝试将state
赋值的那一行代码包裹在$apply()
中,以便让Angular更新绑定。
感谢您的快速回复!第一个问题:{{skypeClient.isSignedIn()}}的绑定在我的测试中是正常工作的,你不需要添加一个watch...你能否提供一些代码以便我们看到你的尝试是什么?第二个问题:你是对的,我刚刚注意到你使用的是service而不是factory -- 所以你应该使用"this"来填充而不是返回一个对象(你的函数是一个构造函数)。
我还注意到原始代码中有关使用this
的一些混乱:例如,errors
是在this
上设置的,但isSignedIn
不是。在signIn
的.then
回调中,你引用了this.errorCount
-- 我认为这个this是错误的this
!在signOut
中,你有this.isSignedIn
-- 也似乎是错误的。一般来说,我发现使用factory
而不是service
更容易理解,只使用闭包,避免对this
的困惑。这也可能有趣:When to use service instead of factory
另一个问题:AngularJS - The correct way of binding to a service properties
我已经根据您的建议将更新的代码添加到我的原始帖子中,并对输出及我想要做的事情进行了更简明的解释(无法在评论中找到代码发布的方法)。另外,这两个参考帖子非常有帮助!尽管我似乎无法成功使用它们,但希望这是我的错误。再次感谢您如此详细的回复,这是一个了不起的社区!