2017-09-29 3 views
1

디버깅 목적으로 각진 응용 프로그램에서 $state.reload()을하고 싶습니다. 이 질문을 참조하십시오 how-do-i-reload-an-angular-partial-for-testing-purpose

$rootScope 개체가 노출되지 않은 응용 프로그램에서 $state을 캡처 할 수 없습니까? Wiki

var myApp = angular.module('myApp', []); 
angular.module("myApp").run(function ($rootScope, $state, $stateParams) { 
    $rootScope.$state = $state; 
    $rootScope.$stateParams = $stateParams; 
}); 

에 설명 된대로 다음 how-to-access-update-rootscope-from-outside-angular

var $body = angular.element(document.body); 
var $rootScope = $body.scope().$root; 

에 도시 된 바와 같이 나는이 일을하여 $의 rootScope를 얻을 수 있었다 그러나 $rootScope.$state이 설정되지 아무것도 $ rootScope 지금 접근 생각했다. 어떤 도움이 필요합니까? Angular 1.3.x를 사용하고 있습니다. 편집

: 심지어이 작동하지 않습니다, 각 1.5.x 이하의 경우

angular.module("myApp").run(function ($rootScope, $state, $stateParams) { 
    console.log("Testing"); 
}); 
+0

문제는'run' 이벤트가 아닙니까? – Nishant

+1

마지막 스 니펫은 오류로 인해 작동하지 않습니다. 문제가 발생하면 전체 오류 메시지와 http://stackoverflow.com/help/mcve를 제공하는 것이 바람직합니다. 그렇지 않으면 문제 해결이 완전히 추측됩니다. 어떤 식 으로든, 당신의 경우'$ rootScope. $ state = $ state'는 꼭 필요한 것은 아닙니다. 그것은 단지 'angular.element (document.body) .injector(). get ('$ state ')'이어야합니다. – estus

+0

그래,이 사건과 관련된 흔적은 보이지 않지만 끝내고있는 뭔가 다른 일이있어 -이 사건과 관련이 없다. 그러나 괜찮습니다. 언젠가 나중에 디버깅 할 것입니다. 나는'run'이 '밀어 넣기'를하는 것을 볼 수 있습니다. 그래서 그것은 동기 적으로 발생하지 않습니다 :) – Nishant

답변

3

AngularJS 응용 프로그램이 body에 부트 스트랩 된 것을 고려하면

012로 서비스 인스턴스를 가져올 수 있어야합니다.
angular.element(document.body).injector().get('$state'); 

범위에 표시 할 필요가 없습니다.

+0

우수. 나는 이와 같은 해결책을 찾고 있었다. 고맙습니다. – Nishant

1

- 1.6.x 이상인

당신은 당신의 코드가해야이

과 같은 후 것을,이 https://github.com/olov/ng-annotate를 설치해야합니다
angular.module("myApp").run(function ($rootScope, $state, $stateParams) { 
    'ngInject'; // this will fix dependency injection 
    $rootScope.$state = $state; 
    $rootScope.$stateParams = $stateParams; 
}); 
+0

이 응용 프로그램에서 Angular 1.3.x를 사용하고 있습니다. 그래서 아무 것도 내부에서 할 수 없습니까? – Nishant

+1

당신은 ngAnnotate가 1.3.x에서 작동 할 것이라고 생각해야합니다. –

+0

추가 모듈이없는 접근법이 없습니까? – Nishant