场景:集成Stomp与我们的Angular。在用户登录时,调用一个stomp服务,该服务发送数据然后在模块控制器中获取数据。
踩踏服务
select
模块控制器
var wrappedSocket = {
init: function(url) {
stompClient = Stomp.over(new SockJS(url));
},
connect: function(successCallback, errorCallback) {
stompClient.connect({}, function(frame) {
//$rootScope.$apply(function() {
$timeout(function () {
successCallback(frame);
});
}, function(error) {
//$rootScope.$apply(function(){
$timeout(function () {
errorCallback(error);
});
});
},
subscribe : function(destination, callback) {
stompClient.subscribe(destination, function(message,headers) {
//$rootScope.$apply(function(){
$timeout(function () {
callback(message,headers);
});
});
},
send: function(destination, headers, object) {
stompClient.send(destination, headers, object);
}
}
return wrappedSocket;
这里svc是Sockjs var initializing = false;
$timeout(function () {
alert('timeout');
$scope.$watch(svc.getMessage, function (v) {
if (initializing) {
$timeout(function () { initializing = false; });
} else {
if (v != '') {
console.log(v);
$scope.notifications = v;
$scope.notification_count = $scope.notifications.length;
}
}
});
}, 3000);
最终在服务中将svc.setMessage($scope.messages);
更改为$rootScope.$apply(function() {
。但后来在模块控制器中发现,$timeout(function () {
无法工作/调用。
预期结果 - 应在$watch
发生了什么 - $ watch未被调用导致没有显示stomp消息。
$watch
内调用函数?$scope.$watch(svc.getMessage,
function (v)
替代解决方案?