2015-10-02 2 views
4

Я воспользовался несколькими ответами об использовании службы $http для доступа к файлу свойств, но теперь точно, как он поместился бы в этом сценарии Я создал службу, которая возвращает имена хостов из файла poperties , вызывающий клиент этой службы должен сделать блокирующий вызов этой службе и действовать только в том случае, если файл свойства будет считан.Чтение свойств файла в Angular

var serviceMod = angular.module('serviceModule',[]) 
.factory('configService', function($http){ 
    return { 
     getValue: function(key){ 
      $http.get("js/resources/urls.properties").success(function(response){ 

       console.log('how to send this response to clients sync??? ' + response) 

      }) 
      return ???? 

     } 
    } 
}) 

someOtherControllr.js

var urlValue = configService.getValue('url') 

Проблема я столкнулся это делать с aync характером $http службы. К моменту ответа ответа на обратный вызов основной поток уже завершен. someOtherController.js

+0

было моим предложением помочь вам в любом случае? Пожалуйста, поделитесь своими результатами – scniro

ответ

2

Вам необходимо решить обещание, возвращенное службой. Мы можем просто вернуть звонок $http и решить его в нашем контроллере (с return $http.get будет само обещание). Проверьте AngularJS $q и $http документы для улучшение понимания основных механики происходит, и наблюдать следующие изменения ...

.factory('configService', function($http) { 
    return { 
     getValue: function(key) { 
      return $http.get('js/resources/urls.properties'); 
     } 
    } 
}); 

var urlValue; 

// --asynchronous 
configService.getValue('url').then(function(response) { 
    urlValue = response.data; // -- success logic 
}); 

console.log('be mindful - I will execute before you get a response'); 
[...] 
+0

, поэтому каждый раз, когда нам нужно получить доступ к url ​​в вызывающем userController.js, мне нужно написать код клиента в блоке ответа? – tintin

+0

Хм, это только статические данные? Почему бы не сделать 'константу' или разместить ее на' $ rootScope' в вашем блоке '.run' вашего приложения? Можете ли вы объяснить немного больше, что вам нужно для этого, как часто, и если он изменится? – scniro

+0

также, вы используете ui-router случайно? – scniro

0

Простой способ - использование обратного вызова (она все равно будет async. Фактически, вы не можете его синхронизировать):

getValue: function(key, onSuccess){ 
     $http.get("js/resources/urls.properties").success(function(response){ 
      onSuccess(response); 
    }) 
Смежные вопросы