2016-09-20 8 views
-2

나는 당황합니다.

첫째, 나는 1 + 이온이 관찰 (하지만 난이 아마 AngularJS와 관련되어 가정)을 $ rootScope 주입과

내가, 공장을 만들었습니다. 내 app.js에서

, 난 변수를 할당,

var app = angular.module('my-module', 
    app.run(['$rootScope', ... 

     $rootScope.strUrl = 'http://localhost:30000' 

그럼 난 공장 내에서이 변수를 사용할 필요가 말한다. 정확하게로드 된 직후에 액세스하십시오.

내가 당황 스럽다면 공장에서 $ rootScope.strUrl에 액세스 할 때 정의되지 않은 값을 반환합니다. 그러나, 그 전에 한 줄, 나는 정확히 내가 원하는 문자열을 반환 console.log($rootScope.strUrl) 수 있습니다.

공장에서 $ rootScope 콘텐츠에 액세스 할 수 있습니까?

+0

문제를 해결 한 경우 해당 질문을 삭제하십시오. 그렇지 않다면 질문을 다시하시오. – Nix

+0

이 질문을 어떻게 수정해야합니까? 실제로 내가 관찰 한 것을 보여줍니다. – zeroflaw

+0

도움을 받으려면'rootScope.strUrl = 'http : // localhost : 30000'을 어디에 설정해야하는지 이해해야합니다. 'app.js'에 있다고해서 전혀 도움이되지 않습니다. – Nix

답변

0

흠 ... 나는 무엇이 잘못되었는지 알고 있습니다. 시퀀스의 문제입니다.

아직 CONSOLE.LOG 종류의 오해의 소지가 첫 app.run (실행하기 전에 내 공장을 통해 갈 것

AngularJS와 [ '$의 rootScope을', ...].

0

당신의 목표 인 경우 가장 쉬운 방법은 두 가지 더 좋은 옵션이있는 "설정"을 설정하는 것입니다. 가장 쉬운 방법은 편집증 인 경우 value을 사용하고 jackhammer를 사용하려면 provider을 사용하는 것입니다. 두 가지 모두에 액세스 할 수있는 상수를 사용하는 방법의 예 공급자 및 서비스는 아래에 있습니다. 제공자는 더 복잡하지만 제공자를 사용하는 경우 앱의 config 단계를 사용하여 설정/구성 할 수 있습니다.

var app = angular.module('my-module', []); 

app.constant('settings', {strUrl : 'http://localhost:30000'}); 

app.factory('myFactory', myFactory); 
function myFactory(settings){ 
     var objUrl = { 
       baseUrl: $settings.strUrl, 
       .... 

     } 
} 

자세한 설명은 AngularJS 문서를 참조하십시오.


실행 중에 액세스하는 항목과 myFactory에서 반환 한 항목에 따라 문제가있는 경우 문제가 발생할 수 있습니다. .run 메서드가 myFactory에 종속 된 종속성을 가져 오는 경우 digest은 myFactory를 주입 할 때까지 완료 할 시간이 없습니다. 나는 당신이 가지고있는 방식이 이상적이라고 생각하지 않으며, 과거에는 constantsproviders을 사용하여 내 응용 프로그램을 구성했습니다. 우리는 당신을 위해 무엇을 하려는지를하는 오픈 소스 라이브러리를 가지고 있습니다.

app.constant('settings', { 
    base: 'http://localhost:30000/' 
}); 

이 실행 단계에서 우리의 UrlInterceptor 인터셉터를 추가

https://bitbucket.org/unboxedtech/angular.core/src/e2b1b8dd9457de7b334655f09410da1a78fb55c8/app/src/urls/?at=master

은 기본적으로 당신은 설정 개체 정의) 그러나 문서는 매우 부족하다.

그리고 당신은 같은 것을 할 것이 있습니다 : 그것은 또한 템플릿 및 기타 http 따라 서비스와 함께 작동

$http('~/someresource') 
// which translates to http://localhost:3000/someresource 


$http('~(api)/someendpoint') 
// which translates to http://localhost:3000/api/someendpoint 

합니다.