【问题标题】:Meteor client side object update after server method using Angular-Meteor使用 Angular-Meteor 的服务器方法后 Meteor 客户端对象更新
【发布时间】:2016-02-24 19:33:11
【问题描述】:

我有一个关于 Meteor 的一般性问题,它的客户端更新与 angular 相结合。

假设我正在使用流星帐户捆绑包并使用填充了用户对象的“用户”集合(或任何其他集合,没关系)。现在我想构建一个详细信息页面,如果我想显示一个用户对象的详细信息。

在此页面上,我订阅了以下出版物:

// server code
Meteor.publish('userDetails', function(userId) {
  return Meteor.users.find({ _id: userId });
});

在客户端,我正在订阅和加载对象,如下所示:

$scope.user = $scope.$meteorObject(Meteor.users, userId, false)
   .subscribe('userDetails', userId);

在详细信息页面上有一个按钮,它触发一个流星方法,该方法更新服务器端当前显示的用户对象。像这样的:

模板:

// client template
<div>User object: {{user}}</div>
<button ng-click="modifyUser()">Do it!</button>

控制器:

// client controller
...
$scope.modifyUser = function() {
    $meteor.call('updateUser', $scope.user._id, 'foo').then(function(result) { 
        ... 
    }, function(err) { 
        ... 
    });
}

服务器方法:

// server
Meteor.methods({
    updateUser: function(userId, someValue) {
        return Meteor.users.update({ _id: userId }, { $set: { 'profile.someValue': someValue }});
    }
});

现在我的问题是:

我期待的是在updateUser 客户端方法调用之后自动更新用户对象。但实际上什么都没有发生。我做错了什么?

一般情况下:我如何触发在服务器上修改的模型的客户端更新?使用 Meteor-Angular 时如何实现?

【问题讨论】:

  • 您的模板中有一些非反应性的东西,也许是帮助器将用户对象返回到您的模板? (您没有显示该代码)。完全不同的是,您的发布方法在您的应用程序中打开了一个卡车大小的安全漏洞,任何客户端(无论是否登录)都可以通过该漏洞访问所有任何用户的信息,甚至获取列表所有用户帐户。
  • 感谢您的评论。这只是一个解释我的问题的示例代码,我不会放在网上。

标签: javascript angularjs meteor angular-meteor


【解决方案1】:

我找到了问题的原因:我所有的Meteor.methods(...) 都只在服务器端定义。现在一切似乎都按预期工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多