如何从angularjs中的工厂/服务中获取javascript数组的值

时间:2017-03-17 04:07:57

标签: javascript php angularjs ionic-framework

数组'聊天'的范围仅限于'.then'并且在'all'函数中将其值赋值为

    angular.module('starter.services', [])
    .factory('Chats', function($http) {
    var chats=[];
      result = "";
    $http.get('http://localhost/Finalvts/AndroidData/GetDailySchedule.php')
    .success(function(data, status, headers,config){
    console.log('data success');
    console.log(data); // for browser console
    var i=0;
    data.forEach(function (x) {
    x['id']=i;
    i++;
    })
      chats = data; // for UI
      console.log(chats);

        })
    .error(function(data, status, headers,config){
      console.log('data error');
    })
      .then(function(result){
      chats = result.data;
      console.log(chats);
    });
      return {
    all: function() {
      console.log(chats);
      return chats;

    },
      remove: function(chat) {
      chats.splice(chats.indexOf(chat), 1);
    },
  };
});

数组聊天没有显示控制台中变量'data'返回的值...请给出一些建议......谢谢......

1 个答案:

答案 0 :(得分:0)

在从http请求获取数据之前返回聊天。这是因为$http.get是异步的,需要一定的时间来获取数据。在获取数据时,您将返回当前具有[]的聊天数据。尝试在.then()中返回数据。像这样的东西

angular.module('starter.services', [])
     .factory('Chats', function($http) {
         var chats = [];
         result = "";
         $http.get('http://localhost/Finalvts/AndroidData/GetDailySchedule.php')
             .success(function(data, status, headers, config) {
                 console.log('data success');
                 console.log(data); // for browser console
                 var i = 0;
                 data.forEach(function(x) {
                     x['id'] = i;
                     i++;
                 })
                 chats = data; // for UI
                 console.log(chats);

             })
             .error(function(data, status, headers, config) {
                 console.log('data error');
             })
             .then(function(result) {
                 chats = result.data;
                 console.log(chats);
                 return {
                     all: function() {
                         console.log(chats);
                         return chats;

                     },
                     remove: function(chat) {
                         chats.splice(chats.indexOf(chat), 1);
                     },
                 };
             });

     });