2012-06-29 41 views
0

如果另一段代码调用$scope.$on,我希望我的服务得到通知,以便它可以订阅具有相同命名通道的websocket。我可以收听$rootScope的活动吗?或者我可以收看$的表情吗?如何检测新听众是否已注册?

我尝试这样做:http://jsfiddle.net/polidore/AZ7Av/

在那里我$watchingObject.keys($scope.$$listeners).length,但它似乎并没有得到从最初的负载叫一边。

谢谢!

回答

1

代替拨打$on,最好的方法是在通知您的服务时为您创建自己的功能,为您拨打$on

如果你真的需要通过$on功能检测到它,那么你就可以覆盖这样的功能:

var old$on = $scope.$on; 
$scope.$on = function(name, listener) { 
    // Code to notify your service here 

    old$on.apply(this, arguments); 
} 
+0

感谢。我正在尝试为图书馆做这件事。我想我可以让用户通过我的服务注册事件,但这会是很好的语法糖,可以让他们使用普通的API,并且注册会自动挂接到我的服务中。 – BHP

+0

谢谢,Kranklin。我在这个jsfiddle中使用了override方法。 – BHP

+0

我在下面的项目中使用了这个方法:https://github.com/polidore/ss-angular更多内容来了。 – BHP