我有两个控制器,两个控制器都在监听同一个事件。该事件从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
});
}
答案 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
});