gpt4 book ai didi

javascript - 自动$广播数据

转载 作者:行者123 更新时间:2023-11-29 19:11:42 26 4
gpt4 key购买 nike

我正在尝试使用 $rootScope 从一个 Controller 向另一个 Controller $broadcast 一些数据。

如果我使用像 ng-click 这样的触发器来运行将广播的功能,它似乎工作正常但没有它怎么办?

正如您在 fiddle 中看到的那样,我在 $scope.cast 函数中进行了广播,所以如果我像这样运行该函数,为什么它不起作用:$scope.cast (); ?

fiddle :https://jsfiddle.net/kjgj7Ldz/19/

我需要这个,因为我正在第一个 Controller 中获取一些数据,当它完成时,我想自动广播它而不需要 ng-clickng-change 或任何其他触发器。

$broaadcast 在这种情况下做错了吗?如果是这样,我怎样才能实现这两个 Controller 之间的数据通信?

最佳答案

您可以通过创建一个简单的 pub-sub 服务来为您处理通信 channel ,从而避免在 Controller 之间使用范围进行通信。例如,它可以为迟到的订阅者传递所有消息。 Demo .

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)
}]);

关于javascript - 自动$广播数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com