AngularJS$范围$关于多个事件
AngularJS $scope.$on multiple events
我有一个场景,需要监听通过$scope.$emit
传输的两个不同事件,并且只有当这两个事件都发生时,我才想执行。。
例如,如果触发的事件如下:
$scope.$emit('first');
// do nothing
$scope.$emit('second');
// execute something
$scope.$emit('first');
// Do nothing
$scope.$emit('first');
// Do nothing
$scope.$emit('second');
// execute something
有什么东西可以开箱即用吗?理想情况下类似
$scope.$on('first', 'second', function() {});
我考虑过做以下事情:
var triggeredEvents = [];
$scope.$on('first', function() {
notifyEventTriggered('first');
});
$scope.$on('second', function() {
notifyEventTriggered('second');
});
function notifyEventTriggered(event) {
if (triggeredEvents.indexOf(event) == -1) {
triggeredEvents.push(event);
}
if (triggeredEvents.length > 1) {
execute();
triggeredEvents.length = 0;
}
}
那么,有什么能让它更简单吗?或者对如何改进它提出一些建议?除了为此创建服务之外。
感谢
没有内置的方法。我个人会在$rootScope中附加一个新方法,如下所示:
https://jsfiddle.net/qv6m2drz/5/
var app = angular.module('jsbin', []);
app.run(['$rootScope', function($rootScope) {
$rootScope.onAllEvents = (function() {
var watchedEvents = {};
return onAllEvents;
/*
* Attach listeners to all events
*/
function onAllEvents(events, fn){
if(!events || !events.length) return ;
events.forEach(function(evt){
watchedEvents[evt] = false;
this.$on(evt, function(){
watchedEvents[evt] = true;
tryExecute(fn);
});
}.bind(this));
}
/*
* Check if all `watchedEvents` have fired. If yes, run fn() and reset the events
*/
function tryExecute(fn){
var shouldExecute = true;
for(evt in watchedEvents){
if(watchedEvents.hasOwnProperty(evt) && !watchedEvents[evt]){
shouldExecute = false;
}
}
if(shouldExecute){
fn();
for(evt in watchedEvents){
if(watchedEvents.hasOwnProperty(evt)){
watchedEvents[evt] = false;
}
}
}
}
})();
}]);
相关文章:
- 如何将返回的值应用于多个不同位置的多个选择器
- 插件总是只得到最后一个实例,如何让它适用于多个元素
- 使jQuery自动完成功能适用于多个单词(“跳过”一个单词)
- 每个事件具有多个事件处理程序的SignalR
- 将jQuery应用于多个不同的动态创建的HTML元素
- 如何使用输入模糊事件更新多个具有相同类名的标签的文本
- Javascript:将类应用于多个 Id 用于交互式地图
- 无法获得$q.所有工作都致力于多个承诺
- 有没有一种纯粹的Javascript方法可以将一个函数应用于多个元素的事件
- 对于 JQuery 中具有不同事件的多个目标 ID 的相同函数
- 将悬停时将 CSS 应用于多个组件
- 如何使这个js适用于多个项目
- 我怎样才能让 sinon 屈服于多个回调
- JQuery 将一段代码应用于多个元素
- 如何让一个事件调用多个函数?D3/Javascript
- jQuery UI 可排序函数是否同时适用于多个表
- jQuery - 将方法应用于多个对象
- 将挖空.js模型应用于多个图元
- 如何将jQuery事件处理程序应用于多个缓存的选择器
- 如何将 jQuery 点击事件应用于多个 ID