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

时间:2015-10-22 03:16:29

标签: javascript json angularjs ionic lodash

这是控制器。

.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()

2 个答案:

答案 0 :(得分:0)

不用担心在这里使用 - 我们可以使用AngularJS Filter。请注意以下简化示例。你可以从这里塑造你的工作副本......

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

var found = $filter('filter')(items, { id: 2 }, true); // { 'id': 2 }

JSFiddle Link - 演示

答案 1 :(得分:-1)

解决了它。 我在服务器端添加了一个不同的路由,这将允许我使用附加的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;