2016-10-05 3 views
1

у меня есть 2 разных угловых контроллеров и один из его того вещать как этот

$timeout(function() { 
    if($scope.modal){ 
     $rootScope.$broadcast(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,id); 
     $scope.modal.hide(); 
     $scope.modal.remove(); 
    } 
}, 3000); 

А в другой контроллер я ловить радиопередачу.

$scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,id){ 
    // some action 
}); 

Проблема $ сферы. $ На функцию вызывалась 3 раза. Я уже упоминал

но не смог получить разрешение использовать их. Пожалуйста, помогите мне ... !!

+2

Каков контекст этого вызова '$ timeout'? Что заставляет его выполнять? – Phil

+0

Можете ли вы разместить свой HTML-код, как вы загружаете свои разные контроллеры! Если вы инициировали один и тот же контроллер более одного раза, эта проблема возможна. –

+0

Вправо .... @ Angular_10 его действие из-за нескольких контроллеров загружается в какой-то момент. Я все еще смотрю, как это происходит ... –

ответ

0

Чтобы устранить проблему на мгновение, я сделал что-то подобное следует,

if(!$rootScope.$$listenerCount[DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST]){ 
    $scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,id){ 
     // some action 
    }); 
} 

Но очень скоро я обнаружил, что у меня есть контроллер несколько раз инициализируемся и я принял корректирующие меры по устранению многочисленных деклараций контроллера.

1

Быстрый и грязный хак: использовать логический флаг

var once = true; 
$timeout(function() { 
    if($scope.modal){   
     $rootScope.$broadcast(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST, {id: id, once: once}); 
     $scope.modal.hide(); 
     $scope.modal.remove(); 
     once = false; 
    } 
}, 3000); 

и прослушивателе:

$scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,args){ 
    if(args.once) 
     // some action, only the first time 
}); 

Имейте в виду, что это (грязная, но все же) решение, только если вы не можете найдите, почему ваша трансляция называется 3 раза за каждое событие.

+0

Спасибо @Luxor, это произошло только для этого события, и это было из-за контроллеров, которые я использовал в моем шаблоне заголовка. Теперь все в порядке. Проблема решена сейчас. –