7

I am trying to get warnings for a certain address in my MongoDb, using a combination of Meteor and Angular.js

In my html file, I'm doing

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

in my app.js file:

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();
    }
  }]);
}

my mongoDb collection:

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

The output from the html webpage shows the entire Warnings collection (thanks to {{currentDispatch.warnings}}, but nothing gets displayed for {{currentDispatch.getWarnings("123 Test Street, TestCity, TestState")}}

2 Answers 2

6
+25

You should use $meteor.object for this

this.getWarnings = function(findByAddress){
  $meteor.object(Warnings, { address: findByAddress }, false); // passing false here to not update the collection from changes in the client
}
Sign up to request clarification or add additional context in comments.

5 Comments

If I do this, won't I loose the auto-publish features? the this.warnings = $meteor.collection(Warnings); pushes updates to the database automatically, but when I have to "return" something isn't that lost?
thanks I'll try this out when I get home and if this works I'll accept and you'll get your points
according to the documentation: 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 I need ALL matches not just "findOne" functionality.
@Matt Westlake If you need all matches then do the same but with $meteor.collection: this.getWarnings = function(findByAddress){ $meteor.collection(Warnings.find({ address: findByAddress }), false); }
@Urigo I tried what you had and got TypeError: The first argument of $meteorCollection must be a function or a have a find function property.
0

From angular-meteor docs, it appears that $meteor.object will soon be deprecated.

There is no need for $meteor.object anymore as we can use Mongo Collection’s findOne function, like so.

Old code:

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

New Code:

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

More detailed bind one tutorial.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.