javascript - 使用 AngularJS 发布订阅服务

标签 javascript angularjs publish-subscribe

我正在使用这段代码创建一个工厂,用于在 Controller 、指令和服务之间发布和订阅消息。

angular.module('app', []);

angular.module('app').controller('TheCtrl', function($scope, NotifyingService) {
    $scope.notifications = 0;

    $scope.notify = function() {
        NotifyingService.publish();
    };

    // ... stuff ...
    NotifyingService.subscribe($scope, function somethingChanged() {
        // Handle notification
        $scope.notifications++;
    });
});

angular.module('app').factory('NotifyingService', function($rootScope) {
    return {
        subscribe: function(scope, callback) {
            var handler = $rootScope.$on('notifying-service-event', callback);
            scope.$on('$destroy', handler);
        },

        publish: function() {
            $rootScope.$emit('notifying-service-event');
        }
    };
});

它工作正常,但我想在发布给订阅它的人时传递数据,我该怎么做。 假设我想发布一个值 4 ,我该如何执行?

最佳答案

如果我理解正确的话,您希望将值 4 发布到 'notifying-service-event' 并且您希望在订阅者内部使用该值。

为了发布一个值,您需要将它传递给您的 emit 函数。

publish: function(msg) {
            $rootScope.$emit('notifying-service-event', msg);
        }

然后,当您使用此发布功能时,传递您想要的值。

node.on("click", click);

function click() {
  NotifyingService.publish(4);
}

在处理 subscribe 事件时:

NotifyingService.subscribe($scope, function somethingChanged(event,msg) {
        console.log(msg); //4
        scope.number = msg //or whatever you want
        scope.$apply();
    });

您可以在此处找到完整示例:https://plnkr.co/edit/CnoTA0kyW7hWWjI6DspS?p=preview

这是对问题的回答: Display informations about a bubble chart D3.js in AngularJS

关于javascript - 使用 AngularJS 发布订阅服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36628845/

相关文章:

javascript - 测试 key 是否在 React 组件的对象中

javascript - 如何从 React JS 中的另一个组件获取引用

javascript - 正则表达式删除空格

javascript - 如何使用vue保持css样式

javascript - 在 AngularJS 的谷歌地图中单击标记时如何关闭其他信息窗口

jQuery 日期选择器不适用于 ng-grid 单元格

c++ - 一段时间后 zmq 套接字不工作

javascript - 我有一个包含 100 个对象的数组,具有类别和子类别的属性,并且需要创建一个新的子类别计数数组?

redis - 可以将redis键空间通知推送到redis流而不是pub/sub channel 吗

node.js - NodeJS 服务器没有用于 Redis 订阅的 http