我正在尝试订阅与登录用户不同的用户的profdle信息,但我遇到的问题如下所述 我正在使用角度材料,我的代码如下所示:
//publish user info upon following user
Meteor.publish("getUserInfo", function (userId) {
return (Meteor.users.find({_id: userId}, {fields: {profile: 1}}));
});
//subscribe
$scope.$meteorSubscribe("getUserInfo", askLikeController.$root.askLike[0].userId).then(function (subscriptionHandle) {
//Second element in the userProfile array will have the profile of required user
askLikeController.$root.usersProfile = $meteor.collection(Meteor.users, false);
});
问题: 1.在变量askLikeController。$ root.usersProfile中,我得到了loggedIn用户和所需的用户信息userId,我期望userinfo只有所需的userId,为什么会这样? 2.订阅" getUserInfo"不是被动的,甚至在处理几个代码块然后在askLikeController中丢失了订阅。$ root.usersProfile我只留下登录用户的用户配置文件,我的猜测是我的订阅被内置的Meteor取代订阅用户。
如何解决问题?
此致 赤丹
答案 0 :(得分:0)
首先,请确保已删除自动发布:
> meteor remove autopublish
要获得角度流星的反应性,您需要$meteor.autorun
和$scope.getReactively
。这是一个例子:
// we need the requested id in a scope variable
// anytime the scope var changes, $scope.getReactively will
// ... react!
$scope.reqId = askLikeController.$root.askLike[0].userId;
$meteor.autorun($scope, function() {
$scope.$meteorSubscribe('getUserInfo', $scope.getReactively('reqId')));
}).then(function(){
askLikeController.$root.usersProfile = $meteor.collection(Meteor.users, false);
})
仅获取您选择的用户:注意 - 登录的用户始终已发布。因此,您需要在客户端指定要查看的用户,就像在发布方法上所做的那样。所以,在订阅方法中:
askLikeController.$root.usersProfile = $meteor.collection(function() {
return Meteor.Users.find({_id: $scope.getReactively('reqId')})
},false);
此时,最好将其更改为对象而不是集合:
askLikeController.$root.usersProfile = $scope.$meteorObject(Meteor.Users, {_id: $scope.getReactively('reqId')});