angular-meteor находит коллекцию MongoDb и возвращает ее на основе параметров

Я пытаюсь получить предупреждения для определенного адреса в моем MongoDb, используя комбинацию Meteor и Angular.js.

В моем html-файле я делаю

<div ng-controller = "myController as myCtrl">
{{myCtrl.warnings}}
{{myCtrl.getWarnings("123 Test Street, TestCity, TestState")}}
</div>

в моем файле app.js:

Warnings = new Mongo.Collection("Warnings");

if (Meteor.isClient) {
  var app = angular.module('ffprototype', [ 'angular-meteor' ]);

  app.controller('myController', ['$window','$meteor', function($window, $meteor) {

    this.warnings = $meteor.collection(Warnings);

    this.getWarnings = function(findByAddress){
        Warnings.find({address: findByAddress}).fetch();
    }
  }]);
}

моя коллекция mongoDb:

{
    "_id": "3ixgxEMZDWGtugxA7",
    "address": "123 Test Street, TestCity, TestState",
    "warning": "Warning 1"
}
{
   "_id": "HZH5FvCD5driBYSJz",
    "address": "123 Test Street, TestCity, TestState",
    "warning": "Warning 2"
}

Вывод с веб-страницы html показывает всю коллекцию предупреждений (благодаря {{currentDispatch.warnings}}, но для {{currentDispatch.getWarnings("123 Test Street, TestCity, TestState")}} ничего не отображается).


person Matt Westlake    schedule 09.05.2015    source источник


Ответы (2)


Для этого следует использовать $meteor.object.

this.getWarnings = function(findByAddress){
  $meteor.object(Warnings, { address: findByAddress }, false); // passing false here to not update the collection from changes in the client
}
person tmaximini    schedule 11.05.2015
comment
Если я это сделаю, не потеряю ли я функции автоматической публикации? this.warnings = $meteor.collection(Warnings); автоматически отправляет обновления в базу данных, но когда мне нужно что-то вернуть, разве это не потеряно? - person Matt Westlake; 12.05.2015
comment
спасибо, я попробую это, когда вернусь домой, и если это сработает, я соглашусь, и вы получите свои баллы - person Matt Westlake; 12.05.2015
comment
согласно документации: A service that wraps a Meteor object to enable reactivity within AngularJS. Finds the first document that matches the selector, as ordered by sort and skip options. Wraps collection.findOne Мне нужны ВСЕ совпадения, а не только функциональность findOne. - person Matt Westlake; 12.05.2015
comment
@Matt Westlake Если вам нужны все совпадения, сделайте то же самое, но с $meteor.collection: this.getWarnings = function(findByAddress){ $meteor.collection(Warnings.find({address: findByAddress}), false); } - person Urigo; 13.05.2015
comment
@Urigo Я попробовал то, что было у тебя, и получил TypeError: The first argument of $meteorCollection must be a function or a have a find function property. - person Matt Westlake; 15.05.2015

Из документов angular-meteor следует, что $meteor.object скоро станет устаревшим.

Больше нет необходимости в $meteor.object, так как мы можем использовать функцию findOne Mongo Collection, вот так.

Старый код:

$scope.party = $meteor.object(Parties, $stateParams.partyId);

Новый код:

$scope.helpers({
  party() {
    return Parties.findOne($stateParams.partyId);
  }
});

Более подробно связать одно руководство.

person DeBraid    schedule 19.03.2016