jquery $ .Callbacks的角度是否有替代品?我想要一个简单的方法来管理角度的回调列表。我想以角度执行以下操作:
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/
如果没有角度的替代品,在lodash,下划线或任何其他横切框架中是否有替代品?也许我可以做任何与承诺类似的事情,任何想法?但我不想做then().then()
,因为我会在不同的地方订阅该事件,例如在控制器和指令中。
我正在寻找一种明确的方式并且易于遵循,订阅不同地方的活动,例如$ .Callbacks,但是角度没有jquery依赖。
例如,当许多对象对同一事件有所影响时,pubsub并不容易理解。而且我不知道在许多具有承诺的对象中订阅相同事件的任何方式/技巧。
答案 0 :(得分:1)
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>