내 프로젝트 (설정 번호, 프로젝트 이름, 기본 연락처 등)에 대한 구성 정보가 들어있는 json 파일에 대한 액세스 권한을 부여하려고합니다. 공장을 만들었습니다. http.get을 사용하여 json 파일을 검색하면 해당 데이터를 내 컨트롤러로 가져올 수 있지만 컨트롤러의 어느 위치에서든 액세스 할 수는 없습니다.출처 http.get에서 출고 된 데이터를 전체 컨트롤러에 액세스 AngularJS
나는 공장을 쓰지 않았기 때문에 그것을 다른 사람의 질문에 대한 대답으로 발견했다. 그리고 그것을 거의 완전히 복사 했으므로 내가하려는 것을 성취하려는 올바른 방법이 아니라면 나를 바로 잡아라. 여기
app.factory('configFactory', ["$http", function($http) {
var configFactory = {
async: function() {
// $http returns a promise, which has a then function, which also returns a promise
var promise = $http.get('assets/json/config.json').then(function(response) {
// The then function here is an opportunity to modify the response
console.log(response.data.config);
// The return value gets picked up by the then in the controller.
return response.data.config;
});
// Return the promise to the controller
return promise;
}
};
return configFactory;
}]);
내 컨트롤러 :
app.controller('footerController', ['$scope', '$rootScope', 'configFactory', function footerController($scope, $rootScope, configFactory) {
var body = angular.element(window.document.body);
$scope.onChange = function(state) {
body.toggleClass('light');
};
configFactory.async().then(function(d) {
$scope.data = d;
// this console log prints out the data that I am trying to access
console.log($scope.data);
});
// this one prints out undefined
console.log($scope.data);
}]);
그래서 기본적으로 내가 아닌 외부에서 그의를 검색하는 데 사용되는 함수 내 데이터에 대한 액세스 권한이 여기
는 공장입니다. rootScope로이 문제를 해결할 수는 있지만 적절한 해결책은 아니라고 생각하기 때문에이를 피하려고합니다.도움이 될만한 내용이지만 http.get과 약속 및 모든 내용에 대한 나의 첫 경험이므로 자세한 설명은 매우 감사하겠습니다.
[EDIT 1] 구성 파일의 변수를 웹 응용 프로그램에서 조작해야하므로 상수를 사용할 수 없습니다.
요청이 완료되기 전에 먼저 'console.log'가 호출되므로'then '외부에서 데이터를 가져올 수 없습니다. . 이것이 비동기 코드의 작동 방식입니다. – estus
@estus 그래서 문제를 해결하려면 어떻게해야합니까? 나는 (10ms와 같은) 짧은 지연을주기 위해 타임 아웃 기능을 추가 할 수 있지만 그것은 단지 해커처럼 보인다. –
'then' 콜백 내에서'configFactory'에 관련된 모든 일을하기는 쉽습니다. – estus