尝试使用angularJS和lodash使用.find()从JSON中查找特定对象

Trying to find a particular object from JSON using angularJS and lodash using .find()

本文关键字:JSON 查找 对象 find angularJS 使用 lodash      更新时间:2023-09-26

这是控制器

.controller('EventMapCtrl', function($scope, $stateParams, Events) {
    var vm = this;
    vm.EventId = Number($stateParams.id);
    Events.getEvents.then(function(data) {
        vm.event = _.find(data, {id: vm.EventId});
        console.log(vm.event);
    });
    $scope.vm = vm;
});

这是Events服务

.service('Events', function(mApi, mDomain) {
    return {
        getEvents: mApi.getData('/events/')
    }
});
到目前为止,我能够进行http调用并获得所有事件。然而,我试图在控制器中特别完成的是来自迎面而来的数据,我只想要一个id与vm.EventId匹配的事件。到目前为止,我得到一个未定义的错误,当我console.log(vm.event)。我很感激任何帮助。我对角的理解是最近的,我不确定我是否使用.find()正确。

不用担心在这里使用lodash——我们可以使用AngularJS过滤器。观察下面的简化示例。你可以从这里塑造你的工作副本…

// inject $filter
var items = [{'id': 1}, {'id': 2}, {'id': 3}];
var found = $filter('filter')(items, { id: 2 }, true); // { 'id': 2 }

JSFiddle Link - demo

解决了。我在服务器端添加了一个不同的路由,这将允许我使用附加的id进行http调用。此外,我还使用了不同的服务。这是新的服务

.service('Event', function(mApi,mDomain){
    var getEvent = function(id){
      return mApi.getData('/event/'+id);
    };
    return {
      getEvent: getEvent
    };
  })

这是控制器。我进一步实现了map的特定属性。因此,它看起来会和我原来的帖子有很大的不同。

.controller('EventMapCtrl', function($scope, $stateParams, Event) {
    var vm = this;
    Event.getEvent($stateParams.id).then(function (res) {
      vm.event = res.data;
      vm.map = {
        center: {
          latitude: vm.event.location.latitude,
          longitude: vm.event.location.longitude
        },
        zoom: 17
      };
      vm.marker = {
        id: 1,
        latitude: vm.event.location.latitude,
        longitude: vm.event.location.longitude,
        title: vm.event.location.name
      }
    });
    vm.locationClicked = function (marker) {
      window.location = "geo:" + marker.latitude + "," + marker.longitude + ";u=35";
    };
    $scope.vm = vm;
  })

这是我想要完成的具体一行。

Event.getEvent($stateParams.id).then(function (res) {
          vm.event = res.data;