2013-02-20 7 views
0

на следующем jsFiddle я демонстрирую проблему, которая заставляет меня задуматься. Это связано с необходимостью отправки системного события во все области, говоря им, что система завершила загрузку. Для этого я получил rootScope после начальной загрузки и назвал его evalAsync. Увы! его не выполняется.angular.js - evalAsync не называется

посмотреть здесь: http://jsfiddle.net/cusrC/8/

angular.element(document).ready(function() { 
angular.bootstrap(body, ['app']); 
var ngInjector = angular.injector(['ng']); 

var rootScope = ngInjector.get('$rootScope'); 
var x = rootScope.$eval(function(scope) { 
     console.log('in eval'); 
     scope.$broadcast('onLoad'); 
     scope.$evalAsync(function(scope) { 
      console.log('in evalAsync'); 
      scope.$broadcast('onLoad'); 
     }); 
    }); 
console.log('x',x); 
console.log('after'); 
}); 

большое спасибо за любую идею или мысль Лиор

ответ

2

Значок прав о вызове функции $digest, но есть еще одна вещь: вы не получаете правильную область видимости.

angular.bootstrap возвращает инжектор для модулей, которые уже втягиваются в модуль 'ng'.

Here's your fiddle, modified.

+0

thanks @satchmorun. это решает. однако проблема немного глубже. Я использую templateUrls, и теперь вижу, что функции связи задерживаются до тех пор, пока все частичные файлы не будут получены с сервера. Так как $ при регистрации прослушивателя происходит во время исполнения функции связи, любое событие, транслируемое до этого выполнения, не получит значение $ on. еще не уверен, как решить, но FYI – Lior

3

Поскольку ваш код работает «вне» Угловое, вам нужно позвонить rootScope $ дайджеста (.) в конце вашего примера кода, чтобы вызвать цикл дайджеста. Тогда выражение внутри $ evalAsync() будет оценено/выполнено.

+0

спасибо @ Mark-Rajcok посмотреть другие комментарии – Lior