Javascript 角服务解耦
我在和angularjs玩一些简单的游戏。我想合并一些实时消息,比如PubNub、PubSub或Pusher。 基本上我有它的工作,但它似乎太麻烦在某些领域。也许你能给我一个更好的方法 好的,这是我的工作JSFIDLE(使用伪造的pubsub) 我有外部服务(Javascript 角服务解耦,javascript,angularjs,Javascript,Angularjs,我在和angularjs玩一些简单的游戏。我想合并一些实时消息,比如PubNub、PubSub或Pusher。 基本上我有它的工作,但它似乎太麻烦在某些领域。也许你能给我一个更好的方法 好的,这是我的工作JSFIDLE(使用伪造的pubsub) 我有外部服务(pubsub),并为其创建了角度服务。 现在,由于我不希望我的应用程序的其他部分依赖于这个具体的实现,我决定创建另一个(inbox)来存储发送的所有消息pubsub)。这个收件箱将是我整个应用程序的依赖项(而不是pubsub) 因此,我希望
pubsub
),并为其创建了角度服务。
现在,由于我不希望我的应用程序的其他部分依赖于这个具体的实现,我决定创建另一个(
inbox
)来存储发送的所有消息pubsub
)。这个收件箱
将是我整个应用程序的依赖项(而不是pubsub
)
因此,我希望我的依赖关系是:
controller -> inbox -> pubsub
当pubsub
收到消息时,它需要将其添加到收件箱
,以便控制器可以看到它并做出相应的反应。问题是我不想要这种向后依赖(pubsub->inbox
)。我想pubsub
通知观察员消息已收到
我现在拥有的是丑陋的回调注册(收件箱在pubsub中注册回调)。我不太喜欢它,因为它有很多样板(关于这个
处理等)
我想知道是否有其他方式连接这些服务?事件(但不强制到处使用$rootScope
)?如果是,在哪里注册这样的事件处理程序?服务可以接收事件吗
看看提供的小提琴,并建议我如何更好地解决它
我不希望我的应用程序的其他部分依赖于这个具体的实现 与服务器的交互已经包装/抽象在pubsub服务中。如果与服务器的交互需要更改,则它已经与该服务隔离。我认为,添加另一层抽象并不足以抵消需要编写的额外代码(正如您已经看到的) 下面是一些关于如何简化代码的其他观察结果(其中一些您可能已经知道,但可能对其他人有指导意义):
$scope.messages=inbox.messages代码>
(如果您喜欢CtTeNo.()函数,请考虑在收件箱服务中私密消息)
即使保持content()函数不变,也不需要广播任何内容
pubsub.subscribe(this.append,this)代码>
由于$on和$broadcast是在作用域上定义的,而且服务是单例的,不受作用域的影响,所以我很确定答案是“否”。非常感谢您的输入!不过有一个问题,在你回答的第3点中有一个
pubsub.subscribe(this.append,this)
,我想避免实现这个subscribe
,因为这会影响call
和this
的技巧。我还想重新发明已经出现在Angular中的轮子。我的意思是,我想使用现有的基础设施(可能是事件以外的东西,如果这里不可能的话),而不是构建自己的观察/通知东西。我只是一个初学者,所以我可能不知道是否有更合适的。也许我这样做也没问题。另请参阅其中描述的服务类似于pubsub/事件总线。“我不希望我的应用程序的其他部分依赖于此具体实现”,然后在不同的模块中声明服务。