[英]AngularJS pass callback from controller to service
我有一個控制器定義如下:
menuController.controller('menuController', ['$scope', '$rootScope', '$log', 'techMessageService', 'subscriptionService',
function ($scope, $rootScope, $log, techMessageService, subscriptionService) {
$scope.newTechMessage = false;
var handleNewTechMessage = function (data) {
$log.log('handleTechMessage: ' + data);
$scope.newTechMessage = true;
};
var init = function () {
$log.log('menuController init');
subscriptionService.subscribeTechMessages(handleNewTechMessage);
};
init();
}]);
subscriptionService就像:
subscriptionService.service('subscriptionService', ['$log', 'backendService', function ($log, backendService) {
this.subscribeTechMessages = function (handler) {
$log.log('subscriptionService:subscribeTechMessages');
var socket = io.connect('https://localhost:9001');
socket.on('connect', function () {
socket.emit('adduser', '80040002');
});
backendService.post('/subscribeTechMessages');
socket.on('NEW_MESSAGE', handler);
};
this.unsubscribeTechMessages = function () {
$log.log('subscriptionService:unsubscribeTechMessages');
return backendService.post('/unsubscribeTechMessages');
};
}]);
我遇到的問題是傳遞給服務的handleNewTechMessage函數。 它作為事件處理程序執行,它將newTechMessage范圍變量設置為true,但更改不會反映在視圖上。 我在視圖上有newTechMessage綁定,它仍然是假的。 我有什么誤解? 我想它應該工作,但我想知道在修改范圍變量時,函數傳遞是否正常。
叫消化
在handleNewTechMessage
回調中,使用$scope.$apply()
調用范圍消化。 如果沒有這種消化調用,Angular就沒有理由理解可能已經改變的東西。
回調為數組
在您的實現中,每個處理程序注冊都會調用io.connect
。 最好有一個內部數組,回調被推入,並在socket消息中循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.