【问题标题】:AngularJs $filter in service using functionAngularJs $filter 在服务中使用函数
【发布时间】:2023-03-12 21:30:02
【问题描述】:

我一直在学习角度,特别是 $filter('filter') 函数以及如何将本地函数作为过滤函数传递给它。

API(json 文件)包含 trips.json 中的所有行程以及 user.trips.json 中用户已进行的所有行程的 id 数组。

获取数据的工厂如下所示:

app.factory("tripsApi", function ($http) {
  return {
    allTrips: $http.get('/api/trips.json')
      .success(function (response) {
        return response;
      })
      .error(function (error) {
        return error;
      }),
    userTrips: $http.get('api/user.trips.json')
      .success(function (response) {
        return response;
      })
      .error(function (error) {
        return error;
      })
  }
});

下一段代码只是一个检索所有用户行程信息的服务。该服务使用工厂来访问 API(在本例中只是 men json 文件)。它应该过滤旅行信息以仅检索用户使用 id 数组进行过的旅行。

app.service("trips", function (tripsApi, $filter) {
  var self = this;

  this.user = {
    trips: Array()
  };

  this.trips = Array();

  this.getUserTrips = function () {
    self.getAllTrips.then(function () {
      tripsApi.userTrips.success(function (response) {

        self.user.trips = $filter('filter')
        (self.trips, self.containsChild(id, response));

      });
    });
  };

  this.getAllTrips = tripsApi.allTrips.success(function (response) {
    self.trips = response;
  });

  this.containsChild = function (id, idsArray) {
    if (id != 0 && idsArray != null) {
      for (var i = 0; i < idsArray.length(); i++) {
        if (idsArray[i] == i)
          return true;
        return false;
      }
    }
  }

});

但我无法让它工作。我得到的第一个错误是 self.containsChild(id, response); 中未定义的 id

错误在哪里?欢迎任何帮助:)

【问题讨论】:

  • 使用 lambda 语法 () => {}... tripsApi.userTrips.success( (response) => {});而不是正常功能...看看这是否有帮助

标签: javascript angularjs json service filter


【解决方案1】:

id问题,调用应该是:

$filter('filter')(self.trips, self.containsChild);  // this won’t really work, though, because your `containsChild` function is not properly defined.

第二,这不是一个正确定义的服务。您想要如下所示的内容

app.service('ServiceName', [ '$filter', function ($filter) {
    var myInstance = {};
    myInstance.containsChild = function (value, index, array) {
    };
    myInstance.user = . . .;
    return myInstance;
}]);

第三,修复您的containsChild 函数以采用三个参数。第一个是传递给它的值,第二个是索引,第三个是被过滤的数组。

【讨论】:

  • 感谢您在查看了您的语法后让我明白了它是如何工作的 :)
【解决方案2】:

但我无法让它工作。我得到的第一个错误是 id not 定义self.containsChild(id, response);

哪里出错了?

您将id 传递给函数,但在您提供的代码中没有在任何地方声明idvariable,这是导致错误的原因。

此外,我观察到您的代码中没有一致性,您将 this 分配给 self,但您在代码中的任何地方都继续使用 thisself

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 2015-07-12
    • 1970-01-01
    • 2014-08-08
    • 2015-09-18
    • 2017-09-13
    • 1970-01-01
    • 2015-10-07
    相关资源
    最近更新 更多