在Angular中读取属性文件值

时间:2015-10-02 16:05:46

标签: javascript angularjs angularjs-service

我已经做了一些关于使用$http服务访问属性文件的回复,但现在确定它如何适合这种情况 我创建了一个从poperties文件返回主机名的服务,该服务的调用客户端应该对服务进行阻塞调用,并且只有在读取属性文件时才继续。

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')

我面临的问题是$http服务的异步性质。当回调接收到响应时,主线程已经完成执行someOtherController.js

2 个答案:

答案 0 :(得分: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');
[...]

答案 1 :(得分:0)

简单方法 - 使用回调(它仍然是异步的。实际上你不能让它同步):

    getValue: function(key, onSuccess){
        $http.get("js/resources/urls.properties").success(function(response){
            onSuccess(response);
   })