我在玩angularjs做一些简单的事情。我想加入一些实时消息,如PubNub,PubSub或Pusher。基本上,我已经让它工作了,但在某些方面似乎太麻烦了。也许你能告诉我一条更好的路。
好的,这是我的jsfiddle (使用pubsub伪造的) http://jsfiddle.net/canree/dD5VR/
我有外部服务(pubsub),并为它创建了角度服务。现在,由于我不希望我的应用程序的其他部分依赖于这个具体的实现,我决定创建另一个(inbox)来存储pubsub发送的所有消息。这个inbox将是我的应用程序中的依赖项(而不是pubsub)。
所以我希望我的依赖项是:
controller -> inbox -> pubsub当pubsub收到一条消息时,它需要将其添加到inbox中,以便控制器可以看到该消息并做出相应的反应。问题是我不想要这种向后依赖(pubsub -> inbox)。我希望pubsub通知观察者消息已收到。
我现在拥有的是丑陋的回调注册(收件箱在pubsub中注册回调)。我不太喜欢它,因为它有很多样板(关于this处理等)。
我想知道是否有其他方法来连接这些服务?事件(但不会被迫在任何地方使用$rootScope )?如果是这样,在哪里注册这样的事件处理程序?服务可以接收事件吗?
请看一下提供的小提琴,并建议我如何更好地解决它。
发布于 2012-12-18 10:29:03
我不希望我的应用程序的其他部分依赖于这个具体实现
与服务器的交互已经在pubsub服务中进行了包装/抽象。如果与服务器的交互需要更改,它已经隔离到该服务。我认为添加另一层抽象层并不足以抵消您需要编写的额外代码(正如您已经看到的)。
以下是关于如何简化代码的其他一些观察(其中一些您可能已经知道,但它可能对其他人有指导意义):
$scope.messages = inbox.messages;(如果您喜欢content()函数,可以考虑将收件箱中的消息设为私有service.)
即使您保留content()函数不变,您仍然不需要广播inbox依赖于anything.
pubsub.subscribe(this.append, this);
结合了上述所有观察结果的Fiddle。
我想知道是否有其他方法来连接这些服务?
我只能考虑模型共享(例如,在service1: this.service1_obj_or_obj_property =service2.service2_obj_or_obj_property中),并在其他服务可以调用的依赖服务上创建函数。
服务可以接收事件吗?
由于$on和$broadcast是在作用域上定义的,而且服务是单例的,不受作用域的影响,因此我非常确定答案是“不”。
https://stackoverflow.com/questions/13923162
复制相似问题