在angularjs中进行ajax调用后更新变量

时间:2014-06-06 19:31:07

标签: ajax angularjs

我使用工厂在angularjs中进行数据库调用

var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
  var obj = {};
  $http.get('test.txt').then(function (data) {
    obj.getApiKey = {'Authorization' : data.data};
  });
  return obj;
});
app.factory("Orders", function ($http, Service) {
  var obj = {};
  var api_key = Service.getApiKey;
  console.log(api_key);
  return obj;
});

在上述程序中,当我调用服务工厂的属性并记录 api_key = Service.getApiKey; 的值时,它显示 undefined 。可能是因为没有从$ http调用收到数据。如何同步执行AJAX调用。

3 个答案:

答案 0 :(得分:0)

Jonathan所述,不使用AJAX进行同步调用并不是最佳做法,相反,您可以将promisse作为函数返回并稍后使用:

var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
  var obj = {};
  obj.getApiKey = $http.get('test.txt').then(function (data) {
    return {'Authorization' : data.data};
  });
  return obj;
});

app.factory("Orders", function ($http, Service) {
  var obj = {};

  obj.getApiKey = Service.getApiKey.then(function(data){
      console.log(data);
      return data;
  });

  return obj;
});

在这种情况下,服务返回一个promisse对象,这样就可以确保成功调用值,并在调用后获得数据。

答案 1 :(得分:0)

var app = angular.module('myApp', []);
app.factory("Service", function ($http) {
  var obj = {};
  factory.get=function(success,error){
   $http.get('test.txt').then(function (data) {
     obj.getApiKey = {'Authorization' : data.data};
   });
  return obj;
  }
});
app.factory("Orders", function ($http, Service) {
  Service.get(suc,err);
  var suc=function()
  {
     var obj = {};
  var api_key = Service.getApiKey;
  console.log(api_key);
  return obj;
  }


});

答案 2 :(得分:0)

从您的服务中退回承诺:

app.factory("Service", function ($http) {
   return {
       getApiKey: function() {
           return $http.get('test.txt');
       }
   };
});

注入您的服务,并使用Promise API以异步方式获取数据:

app.factory("Orders", function ($http, Service) {
   var obj = {};
   var api_key = {};

   Service.getApiKey().then(function(apiKey) {
        api_key = apiKey.data;
   });
});