gpt4 book ai didi

javascript - AngularJS 将回调从 Controller 传递到服务

转载 作者:行者123 更新时间:2023-12-02 17:38:32 26 4
gpt4 key购买 nike

我有一个 Controller 定义如下:

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.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,但更改不会反射(reflect)在 View 上。我在 View 上绑定(bind)了 newTechMessage,但它仍然是错误的。我误解了什么?我想它应该可以工作,但我想知道修改作用域变量时该函数传递是否正确。

最佳答案

来电消化

handleNewTechMessage 回调中,使用 $scope.$apply() 调用作用域消化。如果没有这个消化调用,Angular 就没有理由理解某些内容可能已经发生了变化。

回调作为数组

在您的实现中,每个处理程序注册都会调用io.connect。最好有一个内部数组,回调被插入,并在套接字消息上循环。

关于javascript - AngularJS 将回调从 Controller 传递到服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22416135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com