gpt4 book ai didi

javascript - $.Callbacks Angular 替代方案或管理许多回调的方法

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

jquery $.Callbacks 的 Angular 有替代方案吗?我想要一种简单的方法来管理 Angular 回调列表。我想以 Angular 执行以下操作:

function Broadcast(){
var self= this;
this._statusRecivedCallbacks = $.Callbacks();
setTimeout(function () {
self._statusRecivedCallbacks.fire('arg1', 'arg2');
}, 500);
}

Broadcast.prototype.onStatusRecived = function(callback){
if($.isFunction(callback)){
this._statusRecivedCallbacks.add(callback);
}
}

var broadObj = new Broadcast();

//subscribe to this for example in a controller
broadObj.onStatusRecived(function(arg1, arg2){
alert('the argument 1 is: ' + arg1 + ' and the argumet 2 is: ' + arg2);
});

//subscribe to this for example in a directive
broadObj.onStatusRecived(function(arg1, arg2){
alert("I'am suscribe too");
});

代码:http://jsfiddle.net/w0hmqbea/6/

如果 Angular 中没有替代方案,那么 Lodash、Underscore 或任何其他横切框架中是否有替代方案?也许我可以用 promise 做类似的事情,有什么想法吗?但我不想这样做 then().then(),因为我会在不同的地方订阅该事件,例如在 Controller 中的 a 指令中。

我正在寻找一种明确且易于遵循的方法,以在不同的位置(例如 $.Callbacks)订阅事件,但以 Angular 方式订阅事件,而无需依赖 jquery。

例如,当许多对象订阅同一事件时,pubsub 就不容易遵循。而且我不知道有什么方法/技术可以在许多带有 promise 的对象中订阅同一事件。

最佳答案

Angular 没有任何特定于 PubSub 实现的内容。就 Promise 而言,我认为将它们与 $q 服务可以提供的内容进行比较是不正确的,因为它们有不同的用途。毕竟,Promise 并不是真正取代 PubSub 的模式,而且它绝对与事件和回调无关。

如果您的目的是在不使用 jQuery 的情况下编写更透明版本的 PubSub 模式,那么您可以使用纯 Javascript 执行类似的操作。

function Broadcast() {
var self = this;
this._statusRecivedCallbacks = [];
setTimeout(function () {
self.fire('arg1', 'arg2');
}, 500);
}

Broadcast.prototype.onStatusRecived = function (callback) {
if (angular.isFunction(callback)) {
this._statusRecivedCallbacks.push(callback);
}
}

Broadcast.prototype.fire = function() {
var args = arguments ;
this._statusRecivedCallbacks.forEach(function(callback) {
callback.apply(null, args);
});
};

var broadObj = new Broadcast();
broadObj.onStatusRecived(function (arg1, arg2) {
console.log(arg1)
alert('the argument 1 is: ' + arg1 + ' and the argumet 2 is: ' + arg2);
});

broadObj.onStatusRecived(function (arg1, arg2) {
alert("I'am suscribe too");
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

关于javascript - $.Callbacks Angular 替代方案或管理许多回调的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29145382/

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