是否可以将$scope.broadcast
和$scope.$on
放在不同的控制器中?我试图进行全局搜索,一旦我输入文本,数据将指向负责搜索的控制器。我建议您使用$scope.broadcast
和$scope.$on
来传输数据。顺便说一句,我是一名实习生......谢谢。
答案 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!
});