我的出版物依赖于客户的参数。因此,在从客户端订阅时,我需要将此参数发送到服务器。
我使用angular-meteor包并找到$subscribe包装器。
用法如下:$subscribe.subscribe(name, publisherArguments)
我试图将动态$ scope值传递给订阅但它似乎不起作用。例如,以下示例从不警告"您订阅了!"
$subscribe.subscribe('aPublication',$scope.parameter).then(function(){
alert("You subscribed !");
});
假设服务器端看起来像这样
Meteor.publish("aPublication", function (parameter) {
ACollection.find({'aProperty':'parameter'}) });
我应该怎样做才能使$scope.parameter
的工作方式与我使用Session.get('parameter')
的方式相同?
答案 0 :(得分:1)
这是我的工厂,它确实具有这种形状,因为我将它绑定到
angular.module('myApp.controllers').factory('items', function () {
var listOfItems = [
{name: "one"},
{name: "two"},
{name: "three"}];
var currentItem = listOfItems[1];
return {
'list': listOfItems,
'current': currentItem
};
});
接下来是我的控制器,我基本上会关注cities.current值的更改,然后触发将使用正确参数订阅的currentItemChanged
函数。
angular.module('myApp.controllers').controller("MyCtrl", ['$scope', 'items', '$subscribe',
function ($scope, items, $subscribe) {
$scope.$watch(function () {
return cities.current;
}, function (currentItem)
{
currentItemChanged(currentItem.name);
}, true);
function currentCityChanged(itemName)
{
// resubscribe to the right set of
$subscribe.subscribe('anItemsSubscription', itemName).then(function ()
{
});
}
答案 1 :(得分:1)
@Flavien Volken,这是一个非常好的解决方案,但在我们新的0.6.0版本中,您也可以使用与Meteor方式类似的解决方案,使用scope.getReactively - http://angularjs.meteor.com/api/getReactively
所以在你的解决方案中:
$meteorUtils.autorun($scope, function() {
$meteorSubscribe.subscribe('aPublication',
$scope.getReactively('parameter'))
.then(function(){
alert("You subscribed !");
});
});