angular-meteor:插入新文档时通知客户端

时间:2014-12-15 08:27:10

标签: angularjs meteor

我正在使用angularjs和meteor实现通知系统。

在我的出版物代码中,

我有这样的事情:

    var retVal = Notifications.find({recipient: userId});

var handle = retVal.observeChanges({
    //when a new notification is added
    added: function (doc, idx) {
        count++;
        if (!initializing){
            console.log("A record was added");
            self.changed("counts", userId, {count: count});
        }
    },

    removed: function (doc, idx) {
        count--;
        self.changed("counts", userId, {count: count});    
    }

});

最后我返回retVal。 在我的控制器中,我订阅了该出版物。 代码似乎很好,每当添加新文档时,服务器都会触发添加的功能。但是,当添加新文档时,如何通知客户端(类似于触发控制器中的功能)?添加的功能仅在服务器中触发。

2 个答案:

答案 0 :(得分:1)

我认为您应该在客户端上复制observeChanges()。 因此,它将能够观察由subscribe()函数创建和同步的客户端集合。

答案 1 :(得分:1)

我无法看到您的出版物标题,您是否期望参数?

对于绑定集合,您只需使用$ meteorCollection服务:

$scope.notifications = $meteorCollection(Notifications);

我们刚刚更新了我们的API(版本0.6.0-alpha),它在内部进行了observeChanges以查找集合中的任何更改。

但不要忘记订阅该系列 - 您可以通过两种方式实现这一目标:

  1. $meteorSubscribe.subscribe("publicationName", parameters) - 返回一个承诺。
  2. $scope.notifications = $meteorCollection(Notification).subscribe("publicationName", parameters); - 虽然较短,但不会返回承诺。
  3. 如果其中一个参数更改了出版物,则应将其自动运行:

    $meteorUtils.autorun($scope, function(){
      $meteorSubscribe.subscribe("publicationName", {
            limit: parseInt($scope.getReactively('perPage')),
            skip: (parseInt($scope.getReactively('page')) - 1) * parseInt($scope.getReactively('perPage')),
            sort: $scope.getReactively('sort')
          }));
    });
    
    • $ scope.getReactively是我们添加的一个新方法,它为常规的$ scope变量生成一个。这意味着当它发生变化时,该自动运行将重新运行。

    希望它有所帮助,让我知道如何改进答案和文档。