2016-04-18 2 views
0

случае я получил это событие:функция пропуском угловыми обработки rootScope.on

app.run(function($rootScope){ 

document.addEventListener('keyup',function(){ 
if (e.keyCode ===13){ 
$rootScope.$broadcast("EnterPressed",e.target); 
} 

}) 

}) 

Я хочу, чтобы вызвать это событие с помощью этой команды в мой контроллер:

$scope.$on('EnterPressed',console.log("pressed enter"); 

если я запускаю код, приведенный выше , когда выгружаемые обновился я могу увидеть сообщение «прессованного ввести» на консоли

но когда Im сделать это следующим образом:

$scope.$on('EnterPressed',function(){console.log("pressed enter")}; 

код запускается только при нажатии клавиши ввода.

В чем разница?

ответ

0

$scope.$on ожидать как второй параметр указатель функции, если вы пишете console.log("pressed enter") -> то это не указатель функции. Это уже вызов функции.

$scope.$on('EnterPressed',console.log("pressed enter")); 

В это время console.log("pressed enter") уже обработаны, чтобы вычислить значение параметра (не определено здесь).

Ваш второй пример это правильный путь, чтобы получить это событие

$scope.$on('EnterPressed',function(){console.log("pressed enter")}; 

Потому что вы просто использовать указатель на функцию в качестве параметра.

+0

Спасибо! Это помогло мне –

+0

Итак, выберите победителя;) – rootatdarkstar

0

В первом случае это происходит, потому что выражение console.log("pressed enter") оценивается один раз во время загрузки страницы.

Функция console.log с любыми аргументами возвращает undefined. Таким образом, $scope.$on('EnterPressed',console.log("pressed enter")); эквивалентен $scope.$on('EnterPressed',undefined); с побочным эффектом печати "pressed enter" для консоли.

Во втором случае вы передаете функцию обратного вызова в console.log, и эта функция все еще не вызывается. Когда событие испускается $scope.$on вызов переданной функции.

Чтобы понять это, вы должны видеть разницу между этими двумя выражениями:

// passed the function: 
$scope.$on('EnterPressed', function(){ console.log("pressed enter") }); 

// passed result of the function: 
$scope.$on('EnterPressed', function(){ console.log("pressed enter") }()); 
+0

Спасибо! Это тоже помогло мне :) –