首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动$broadcast数据

自动$broadcast数据
EN

Stack Overflow用户
提问于 2016-07-14 10:31:45
回答 1查看 69关注 0票数 2

我正在尝试使用$broadcast从一个控制器到另一个控制器的一些数据。

如果我使用像ng单击这样的触发器来运行将广播的函数,那么它似乎工作得很好,但是如果没有它,它是如何工作的呢?

正如您在小提琴中看到的,我在一个$scope.cast函数中播放了这个广播,所以如果我像这样运行这个函数:$scope.cast();,它为什么不能工作呢?

小提琴:https://jsfiddle.net/kjgj7Ldz/19/

我需要这样做,因为我在第一个控制器中获得了一些数据,当数据完成时,我想在没有ng-clickng-change或任何其他触发器的情况下自动广播它。

在这种情况下,$broaadcast是一件错误的事情吗?如果是这样,如何实现这两个控制器之间的数据通信?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-14 11:04:59

您可以通过创建一个简单的发布子服务来为您处理通信通道,从而避免使用控制器之间的交换范围。例如,它可以为晚订阅者传递所有消息。演示

代码语言:javascript
复制
app.service('MQ', function() {
  var listeners = [],
    messages = [];

  return {
    pub: function(message) {
      listeners.slice(0).forEach(function(listener) {
        try {
          listener(message)
        } catch (ignored) {
          console.log(ignored)
        }
      })

      // save message for late subscribers.
      messages.push(message)
    },
    sub: function(listener) {
      // deliver all messages
      messages.slice(0).forEach(function(message) {
        try {
          listener(message)
        } catch (ignored) {
          console.log(ignored)
        }
      })

      // save listener
      listeners.push(listener)

      // create unbinder
      return function() {
        listeners.splice(listeners.indexOf(listener), 1)
      }
    }
  }
})

app.controller('Controller1', ['$scope', 'MQ', function($scope, MQ) {
  MQ.pub('John Snow')

  $scope.cast = function() {
    MQ.pub(Math.random())
  }
}]);

app.controller('Controller2', ['$scope', 'MQ', function($scope, MQ) {
  var unsub = MQ.sub(function(message) {
    $scope.message = message
  })

  // clean-up bindings on scope destroy.
  $scope.$on('$destroy', unsub)
}]);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38371864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档