【问题标题】:Cannot access a collection in Angular-Meteor无法访问 Angular-Meteor 中的集合
【发布时间】:2016-07-15 19:54:44
【问题描述】:

我正在尝试使用 Angular-Meteor 中的集合中的数据,但到目前为止我无法访问它。

lib/collections.js 我定义了集合:

UserMeta = new Mongo.Collection('userMeta');

server/publish.js 发布它:

Meteor.publish('userMeta', function() {
  return UserMeta.find();
});

在我的客户端代码中 client/scripts/controllers/settings.controller.js 我订阅了:

angular
  .module('App')
  .controller('SettingsCtrl', SettingsCtrl);

function SettingsCtrl($scope, $reactive) {
  $reactive(this).attach($scope);
  this.subscribe('userMeta');
  //...
}

我发现似乎有多种订阅方式(甚至在 Angular-Meteor 的官方教程中使用不一致),但我决定使用 v.1.3.2 的最新语法:Subscribe API

但是如果我想查看集合的全部内容,它会返回一个空数组:

console.log(UserMeta.find().fetch()); // =[]

或者:

console.log(UserMeta.findOne()); // =undefined

但是,如果我在浏览器的客户端控制台中运行这些命令,则会返回预期的结果。

谁能给我一个简短的例子,我可以如何处理我的收藏?我已经习惯了(纯)Meteor 处理这个问题的方式,并且很困惑它在 Angular-Meteor 中似乎并不那么简单。

【问题讨论】:

    标签: javascript angularjs mongodb meteor angular-meteor


    【解决方案1】:

    尝试使用

    Meteor.Methods
    

    在你的服务器端调用

    Meteor.methods({
    getUserMeta: function () {
     var data = UserMeta.find({}).fetch();
     return data;
    }
    

    全部在服务器端调用这个方法

     Meteor.call('getUserMeta',function (err, data) {
       if (!err) {
         Console.log(data);
       } else {
         console.log("error");
       }
    });
    

    【讨论】:

      【解决方案2】:

      当您在 console.log 中使用 Collection 时,它还没有准备好并且没有任何数据。 你可以在 helpers 中使用 console.log 或者你应该像这样检查集合是否准备好:

      // Client-side
      var subs = Meteor.subscribe('lastMsgRead', Meteor.userId());
      Meteor.autorun(function() {
        if (subs.ready()) { ... }
      });
      

      【讨论】:

        猜你喜欢
        • 2015-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        相关资源
        最近更新 更多