我正在使用socket.io在我的应用中启用聊天功能,并且正在使用一项服务SocketService来执行所有套接字操作。当出现消息时,我想从服务中触发控制器的功能SocketService以在UI中进行一些更改。所以我想知道如何从服务访问控制器的功能。样例代码:
SocketService
.service('SocketService', function ($http,$rootScope,$q) { this.connect = function(){ var socket = io(); socket.on('connect',function(){ // Call a function named 'someFunction' in controller 'ChatController' }); } });
这是服务的示例代码。
现在控制器的代码
.controller('ChatController',function('SocketService',$scope){ $scope.someFunction = function(){ // Some Code Here } });
您可以通过使用角度事件$broadcast或来实现此目的$emit。
$broadcast
$emit
在您的情况下$broadcast会有所帮助,您需要广播事件,$rootscope以便$on具有相同事件名称的所有子作用域都可以监听。
$rootscope
$on
码
.service('SocketService', function($http, $rootScope, $q) { this.connect = function() { var socket = io(); socket.on('connect', function() { // Call a function named 'someFunction' in controller 'ChatController' $rootScope.$broadcast('eventFired', { data: 'something' }); }); } }); .controller('ChatController', function('SocketService', $scope) { $scope.someFunction = function() { // Some Code Here } $scope.$on('eventFired', function(event, data) { $scope.someFunction(); }) });
希望这可以对您有所帮助,谢谢。