如何使用数据库中的对象数组作为过滤器?

时间:2017-11-24 03:04:38

标签: javascript php angularjs database

// filter with data from database not working
app.filter('position', function($http, dbOperations) {
  console.log(dbOperations.getAccessPosition());
  var positions = []; //[{name:"cashier",id:1},{name:"operator",id:2}];
  // get the object array from database with name and id
  dbOperations.views("getPositions", "").then(function(res) {
    positions = res; // this is the desired value: [{name:"cashier",id:1},{name:"operator",id:2}]
  });
  var poitionName = "";
  return function(positionNum) {
    positions.forEach(function(p) {
      if (p.id == positionNum) {
        poitionName = p.name;
        return false;
      }
    });
    return poitionName;
  }
});

app.service('dbOperations', function($http) {
  this.getAccessPosition = function() {
    return $http({
      method: "POST",
      url: "/common/functions.php",
      data: {
        'process': "getAccessPosition",
        'data': ""
      }
    }).then(function success(res) {
      return res;
    }, function myError(response) {
      // console.log("Error");
    });
  }
});

当我在console.log的位置时,它打印出我需要的数据。但过滤器无法正常工作。也许是因为数据来自数据库而且还在等待回应。 dbOperations是服务中的,我使用$ http。 请帮我解决一下这个。谢谢。

1 个答案:

答案 0 :(得分:0)

在服务中,只需返回http请求,而不是解开承诺。

app.service('dbOperations', function($http) {
  this.getAccessPosition = function() {
    return $http({
      method: "POST",
      url: "/common/functions.php",
      data: {
        'process': "getAccessPosition",
        'data': ""
      }
    })
  }
});
过滤器中的

在回调函数内执行服务调用。

app.filter('position', function($http, dbOperations) {
  console.log(dbOperations.getAccessPosition());
  var positions = []; //[{name:"cashier",id:1},{name:"operator",id:2}];

  var poitionName = "";
  return function(positionNum) {
    dbOperations.views("getPositions", "").then(function(res) {
      positions = res.data;
      positions.forEach(function(p) {
       if (p.id == positionNum) {
        poitionName = p.name;
        return false;
       }
      });
      return poitionName;
    });    
  }
});