如何将角度流星助手和Meteor.methods一起使用

时间:2016-11-12 20:37:26

标签: meteor ecmascript-6 angular-meteor

我在项目中使用了一堆辅助方法。由于客户端api的限制(不同的功能!),其中一些需要将整个集合加载到客户端。我用Google搜索了问题并找到Meteor.methods作为解决方案。

我可以在Meteor方法中使用帮助器(如this.helpers)吗?或者我应该如何在前端动态更新我的数据? 有人可以举个例子吗?

其他信息:

class View2 {
constructor($interval, $scope, $reactive) {
    'ngInject';
    $reactive(this).attach($scope);
    this.helpers({
        getOrderNumber(){
            this.tempVar = Kafkadata.find().fetch();
            this.tempVar2 = _.pluck(this.tempVar, 'orderNumber');
            this.tempVar3 = _.uniq(tempVar2, false);
            return this.tempVar3;
        },
    });
}

这是帮助程序查询的示例。目前,此代码在客户端运行。我获得所有订单(tempvar),然后删除除ordernumbers(tempvar2)之外的所有数据。最后,我删除所有多个订单号。 ordernumber不是唯一值。以下是其中一个集合的示例:

 {"orderNumber":"f2a3ed95-fcc3-4da0-9b3f-32cf5ed087f8","value":12480,"booleanValue":false,"intValue":12480,"doubleValue":0,"status":"GOOD","itemName":"MILLING_SPEED","timestamp":1479145734448,"_id":{"_str":"5824f4bc7ff3f0199861f11d"}}

我想使用像db.collection.distinct()这样的函数。但他们只在服务器端工作。我想我必须使用Meteor.methods()来使服务器端这个东西。但是这个助手的功能呢?它们如何在Meteor.methods()上工作?

EDIT2:

我的测试: 客户端: 文件夹:myProject的/进口/ UI /厂景

class View1 {
constructor($interval, $scope, $reactive) {
'ngInject';
 $reactive(this).attach($scope);
 this.helpers({
// some code
    getTestData(){
            Meteor.call('allTestData',function(error, result){
                if(error){
                    console.log("error");
                }else{
                   return result;
                }
            });

        }

}); //end of contructor

// this is my testfunction, which is bound to a button!
testFunction(){
    Meteor.call('allTestData',function(error, result){
        if(error){
            alert('Error');
        }else{
            console.log(result);
        }
    });
}

在服务器端:

文件夹:myProject的/服务器/ main.js

Meteor.methods({
    allTestData:()=>{
   var results=Kafkadata.find().count();
    console.log(results);
    return results;
},

});

这是我的view1.html:

//some code
<md-button ng-click="view1.testFunction()"> It works!</md-button>
<h1>{{view1.getTestData}}</h1>

为什么按钮工作,而不是帮助?

1 个答案:

答案 0 :(得分:0)

即使Mongo支持.distinct,Meteor也不会公开它,即使在服务器上也是如此。您只需使用_.uniq作为示例节目,但出于性能原因,如果它在服务器上运行则会更好。

以下是我使用的帮助程序示例:

aweek: () => {
    if (debug)
        console.log("Querying weekly appointments for "+this.selectedWeek.format("Do MMMM"));
    var weekApts = Appointments.find(
        {start: {$gte: new Date(this.getReactively('this.selectedWeek').clone().day(1)),
                $lt: new Date(this.getReactively('this.selectedWeek').clone().endOf('week'))},
              elderid: Meteor.userId()
    }).fetch();
    return utils.services.getAWeek(weekApts,utils.data.elderTimeFormat);
},

请注意在代码中使用 this.getReactively(&#39; this.selectedWeek&#39;) ...基本上这会告诉Meteor以反应方式运行此帮助程序,因此如果值为this.selectedWeek更改,帮助程序将重新运行。因此,当我点击日历中的一周并更新变量时,它会再次运行我的帮助程序来获取数据。

utils.services.getAWeek()函数对数据数组进行一些计算和格式化,使得显示更容易。

如果您创建一个Meteor方法来进行处理,我会让它更新一个包含其结果的集合,然后客户端上的帮助程序将自动更新。最好让技术为您完成工作:)