可以使用$ on和$在不同的控制器中广播

时间:2017-05-18 07:34:01

标签: angularjs-scope

是否可以将$scope.broadcast$scope.$on放在不同的控制器中?我试图进行全局搜索,一旦我输入文本,数据将指向负责搜索的控制器。我建议您使用$scope.broadcast$scope.$on来传输数据。顺便说一句,我是一名实习生......谢谢。

1 个答案:

答案 0 :(得分:0)

当然可以! 使用$ scope。$ emit将触发$ scope范围内的事件。 使用$ scope。$ broadcast将在$ scope范围内触发一个事件。 使用$ scope。$ on是我们监听这些事件的方式。

模拟父级和子级范围的最简单方法是使用控制器。每个Controller创建新的$ scope,Angular为我们整齐地输出新范围元素的ng-scope类:

<div ng-controller="ParentCtrl as parent" class="ng-scope">
  {{ parent.data }}
  <div ng-controller="SiblingOneCtrl as sib1" class="ng-scope">
      {{ sib1.data }}
  </div>
</div>

我们可以使用$ broadcast:

从ParentCtrl向SiblingOneCtrl发送一个事件
app.controller('ParentCtrl',
  function ParentCtrl ($scope) {

  $scope.$broadcast('parent', 'Some data'); // going down!

});

app.controller('SiblingOneCtrl',
  function SiblingOneCtrl ($scope) {

  $scope.$on('parent', function (event, data) {
    console.log(data); // 'Some data'
  });

});

如果我们想要向上通信,从SiblingOneCtrl到ParentCtrl,你猜对了,我们可以使用$ emit。

app.controller('ParentCtrl',
  function ParentCtrl ($scope) {

  $scope.$on('child', function (event, data) {
    console.log(data); // 'Some data'
  });

});

app.controller('SiblingOneCtrl',
  function SiblingOneCtrl ($scope) {

  $scope.$emit('child', 'Some data'); // going up!

});