Angularjs:从多个控制器捕获事件

时间:2016-05-10 09:43:01

标签: javascript angularjs

我有两个控制器,两个控制器都在监听同一个事件。该事件从custom指令发送。 Custom指令在属于控制器的2个其他模板中重用。这两个控制器在捕获事件时正在执行不同的操作。一种是从数据库中删除项目,另一种是从视图中的集合中删除项目。

根据路线调用控制器。他们从不同的路线被召唤。

现在的问题是他们都在同时抓住这个事件。 有没有办法让他们根据路线捕捉事件?

或者你能否解释为什么两个控制器都处于活动状态,即使据说根据路线只应该调用一个?

angular.module('item.module')
    .directive('item', function($rootScope) {
        restrict: 'E',
        template: '<button ng-click="removeItem()"></button>'
        controller: function(){
            $scope.removeItem = function() {
                $rootScope.$emit('deleteThisItem', {item: $scope.item});
            };                  
        }
     };
);

function firstCtrl($scope, $rootScope)
{
    $rootScope.$on('deleteThisItem', function(event, data){
        //deletes the item from list from view
    });
}

function secondCtrl($scope, $rootScope)
{
    $rootScope.$on('deleteThisItem', function(event, data){
        //deletes the item from database
    });
}

1 个答案:

答案 0 :(得分:1)

由于我还没有找到更好的解决方案,因此在进行此事件之前,我已经提出了检查位置路径的解决方案。因此,在每个控制器捕获事件后,它会检查当前路径是否与控制器的路径匹配,如果是这种情况,则继续根据其逻辑删除项目。

这不是一个非常优化的解决方案,但到目前为止它仍在运作。我希望它可以帮助那些面临同样情况的人。

//firstcontroller.js
$rootScope.$on('deleteThisItem', function(event, data){
    if(!$location.path().startsWith('/first')) {
       //if the route is not on the first controller's path
       return;
    }
    //deletes the item from list from view
});

//secondcontroller.js
$rootScope.$on('deleteThisItem', function(event, data){
    if(!$location.path().startsWith('/second')) {
       //if the route is not on the second controller's path
       return;
    }
    //deletes the item from database
});