簡體   English   中英

AngularJS將回調從控制器傳遞給服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM