2013-02-20 2 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를 사용하고, 이제는 링크 기능이 모든 partials가 서버에서 가져올 때까지 지연된다는 것을 알았습니다. 리스너 등록시 $는 링크 함수 실행 중에 발생하기 때문에 실행 전의 모든 이벤트 브로드 캐스트는 $ on에 도달하지 않습니다. 아직 해결 방법은 없지만 참고하시기 바랍니다. – Lior

3

생각, 당신은 rootScope를 호출해야합니다 $ 다이제스트 (.) 샘플 코드 끝에 다이제스트주기를 실행할 수 있습니다. 그런 다음 $ evalAsync() 내부의 표현식이 평가/실행됩니다.

+0

감사합니다. @ Mark-Rajcok 다른 의견보기 – Lior

관련 문제